Cuộn một WrititableBitmap


7

Tôi cần phải mô phỏng cuộn nền của mình nhưng tôi muốn tránh di chuyển điều khiển hình ảnh thực tế của mình. Thay vào đó, tôi muốn sử dụng một WriteableBitmapvà sử dụng một phương pháp làm mờ. Điều gì sẽ là cách để mô phỏng một hình ảnh cuộn lên trên? Tôi đã thử nhiều thứ khác nhau, dường như tôi không thể hiểu được logic:

 //X pos, Y pos, width, height
 Rect src = new Rect(0, scrollSpeed , 480, height);
 Rect dest = new Rect(0, 700 - scrollSpeed , 480, height);

 //destination rect, source WriteableBitmap, source Rect, blend mode 
 wb.Blit(destRect, wbSource, srcRect, BlendMode.None);
 scrollSpeed += 5;

 if (scrollSpeed > 700) scrollSpeed  = 0;

Nếu heightlà 10, hình ảnh khá mờ và moreso nếu chiều cao là 1. Nếu chiều cao là cao hơn, hình ảnh rõ ràng hơn, nhưng dường như chỉ thực hiện một bản sao một. Làm thế nào tôi có thể 'cuộn' hình ảnh để nó trông giống như nó di chuyển lên trong một vòng lặp liên tục? (Chiều cao của màn hình là 700).


1
Tôi thực sự không hiểu tại sao bạn muốn làm điều này, có gì sai khi di chuyển (các) hình nền?
aaaaaaaaaaaa

@eBusiness - Tôi đang cố gắng tạo nhiều họa tiết cuộn. Một số phù hợp với màn hình, một số khác nhỏ hơn. Tôi có thể đang đi sai về nó, nhưng làm thế nào bạn có thể tạo một kết cấu cuộn trên một bề mặt trong Silverlight?
Skoder

Chúng ta đang nói về một nền tảng phải không? Tôi chỉ cần định vị các hình ảnh mà chúng cần phải có để tạo nền mong muốn. Bạn đặc biệt tuyên bố rằng bạn không muốn làm theo cách đó, nhưng bạn không đưa ra lý do.
aaaaaaaaaaaa

@eBusiness - Để tạo nền cuộn, tôi sẽ cần hai điều khiển hình ảnh. Tôi di chuyển lên trên và khi màn hình tắt, tôi đặt lại ở bên dưới (trong khi cái còn lại làm tương tự). Điều này mang lại hiệu ứng cuộn. Nếu tôi làm điều này với một bộ lọc không nền, thì điều khiển hình ảnh sẽ biến mất ngay trước mắt người dùng. Tôi yêu cầu một nền tảng trong câu hỏi chỉ vì đó là những gì tôi đang làm việc, nhưng nguyên tắc sẽ giống nhau cho các kết cấu cuộn khác.
Skoder

Chà, nói cho chúng tôi biết bạn muốn gì chứ không phải bạn không muốn gì. Trong môi trường 3D, bạn có thể thay đổi tọa độ UV để có hiệu ứng cuộn. Tôi không biết chính xác cách Silverlight hoạt động, nhưng trong bất kỳ môi trường 2D hợp lý nào, bạn có thể vẽ một phần hình ảnh lên màn hình mà không cần thông qua bộ đệm kết cấu.
aaaaaaaaaaaa

Câu trả lời:


1

Bạn không thể "cuộn" bộ đệm mà không có nơi nào để lưu trữ bit bị loại bỏ ở cuối, vì vậy có vẻ như bạn sẽ cần phải có một cửa hàng riêng cho giao dịch hoán đổi hoặc bitmap nguồn riêng biệt. Tôi sẽ chọn cái sau vì đơn giản, sau đó bạn có thể lưu trữ một vị trí cuộn và tạo ra các kiến ​​trúc của bạn bằng cách sử dụng nó.

Bạn sẽ cần tạo ra hai đường đua, một cho đỉnh và một cho phía dưới, một cho đỉnh sẽ cần bắt đầu ở độ cao bằng không, và tăng cho đến khi chạm đáy, chỉnh lưu nguồn mà cặp với nó cũng sẽ bắt đầu ở độ cao bằng không, nhưng sẽ bắt đầu từ dưới cùng của hình ảnh nguồn:

Rect src = new Rect(0, 700-scrollPos, 480, 700);
Rect dest = new Rect(0, 0, 480, scrollPos);

Chỉnh lưu phía dưới của bạn sẽ là màn hình bạn nhìn thấy để bắt đầu và sẽ chiếm toàn bộ màn hình lúc đầu, giảm kích thước trong khi di chuyển màn hình ra khỏi đường chỉnh lưu trên cùng, chỉnh lưu nguồn cho việc đó sẽ thực hiện tương tự, nhưng thay vì di chuyển xuống, nó chỉ co lại.

Rect src = new Rect(0, 0, 480, 700-scrollPos);
Rect dest = new Rect(0, scrollPos, 480, 700);

Và sử dụng hai blits đó, bạn có một thanh cuộn.


@Richard Fabian. Xô. Xem thảo luận ở trên, có lẽ bạn có thể xóa tan sự nhầm lẫn. Bạn có xem việc sử dụng một kết cấu trung gian là cách thông thường để đạt được hiệu ứng cuộn không?
aaaaaaaaaaaa

Đối với hầu hết tất cả các tình huống, có một kết cấu nguồn và bộ đệm đích. Tôi đoán trong ánh sáng bạc, kết cấu có thể ghi là bộ đệm đích và nguồn là bất cứ thứ gì có thể được làm mờ trên nó. Tôi chỉ bắt gặp các triển khai tốt hơn khi bộ đệm đích là màn hình (trong trường hợp đó, một shader đã được sử dụng để cuộn một kết cấu) hoặc sử dụng hoạt hình bảng màu.
Richard Fabian

Khi tôi xóa nội dung trong pygame, tôi sẽ sử dụng cùng loại hình chữ nhật để tạo biểu tượng cuộn / sprite bên trong, nhưng sẽ không ghi vào bộ đệm trung gian trừ khi nó sẽ được sử dụng nhiều lần (như nếu biểu tượng cuộn là biểu tượng cho một thành viên của một đội quân thực thể biểu tượng cuộn)
Richard Fabian

Làm mờ, nếu đó là giải pháp duy nhất của bạn cho vấn đề cuộn, thông thường chỉ được tối ưu hóa bằng cách giảm số lần bạn sao chép trên một khung, nếu bạn có thể trực tiếp làm mờ màn hình trong ánh sáng bạc, thì tốt hơn hết bạn nên làm điều đó. Trong thực tế, nếu bạn có thể điều chỉnh cạnh cắt của bộ đệm có thể ghi đang được sử dụng, thì bạn có thể kết xuất nó hai lần với các hình chữ nhật khác nhau để tạo ra kết quả giống như tôi mô tả trong câu trả lời của tôi. tuy nhiên, tôi không biết liệu bạn có thể làm điều đó không, vì vậy không thể giả sử nó trong câu trả lời của tôi.
Richard Fabian

Cảm ơn, tôi đã sử dụng phương pháp làm mờ. Dường như không có nhiều thành tích về hiệu suất, và trò chơi khá đơn giản, vì vậy nó sẽ đủ.
Skoder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.