2010-09-08 30 views
7

Tôi đang làm việc trên một trò chơi trong C# (hoặc 2,0 hoặc 3,5 havn't quyết định được nêu ra). Trò chơi sẽ được chơi trên bản đồ với lưới lục giác. Tôi đánh giá cao giao diện người dùng cho bản đồ này nên sử dụng bộ đệm đôi (nhiều lớp, do đó vẽ chậm). Tôi biết rằng tôi có thể kích hoạt bộ đệm đôi thông qua một kiểu, hoặc tạo bộ đệm của riêng tôi và tự xử lý nó. Hầu hết các ý tưởng tôi tìm thấy trên web là tự mình xử lý. Tôi tự hỏi tại sao? Rõ ràng điều này cho phép tôi tránh các giả định vốn có trong bộ đệm đôi điều khiển, nhưng tôi không biết những giả định đó là gì.Tại sao tôi nên thực hiện đệm đôi thủ công?

Một lần nữa, tôi không tìm mã để giải thích cách tăng gấp đôi bộ đệm điều khiển của mình, mà là vì sao tôi tự xây dựng bản thân này thay vì sử dụng kiểu đệm đôi và cho phép lớp CLR/điều khiển xử lý nó?

Trả lời

3

Trong WFA, đôi đệm chậm hiệu suất mà không loại bỏ hoàn toàn nhấp nháy trong các lĩnh vực đồ họa tùy chỉnh.Đối với các phần tử GUI tích hợp, giống như khi bạn tạo một trò chơi được xây dựng từ ImageButtons và Labels, chế độ đệm đôi được tích hợp sẵn rất tốt trong việc ẩn vẽ lại cây điều khiển. Tuy nhiên, có một vài vấn đề lớn khi sử dụng nó cho khu vực vẽ tùy chỉnh:

  • Bộ đệm vẽ được tạo khi bạn thiết lập ứng dụng vẽ hai bộ đệm được sử dụng để vẽ toàn bộ cửa sổ và tất cả điều khiển con , không chỉ khu vực vẽ tùy chỉnh của bạn, vì vậy bạn thêm phí trên của việc vẽ lại mọi phần tử GUI trên bộ đệm phía sau trước khi lật trang.
  • Nếu bất cứ điều gì làm mất hiệu lực điều khiển, phương pháp Paint được gọi. Bạn có thể không hoàn thành bản vẽ khi điều đó xảy ra và vì vậy bạn sẽ nhận được một hình ảnh không đầy đủ được hiển thị cho người dùng (không tốt trong đồ họa thời gian thực).

Bằng cách giữ cửa sổ cơ bản GUI một bộ đệm, nhưng tạo vùng mà bạn kiểm soát bộ đệm, cả hai vấn đề này sẽ được giảm thiểu.

Phương pháp đệm đôi có thể đơn giản như tạo đối tượng Bitmap làm đệm sau và vẽ nó vào vùng vẽ khi bạn tốt và sẵn sàng hoặc thiết lập BufferedGraphicsContext riêng để quản lý bộ đệm tùy chỉnh của bạn khu vực.

4

Từ MSDN:

Đối với đồ họa ứng dụng chuyên sâu như phim hoạt hình, đôi khi bạn thể cải thiện hiệu suất bằng cách sử dụng một chuyên BufferedGraphicsContext thay vì BufferedGraphicsContext cung cấp bởi BufferedGraphicsManager. Điều này cho phép bạn tạo và quản lý đồ họa bộ đệm riêng, mà không incurring các overhead thực hiện quản lý tất cả các đệm đồ họa khác liên quan đến ứng dụng bạn, mặc dù bộ nhớ tiêu thụ bởi các ứng dụng sẽ được lớn hơn.

EDIT: Tôi cũng thấy this bài báo từ Bob Powell mà có thể hữu ích

tay đôi đệm có thể hữu ích nếu bạn không muốn hệ thống do đó hãy chắc giả định cho bạn chẳng hạn như thể nền mờ hoặc trong suốt hoặc có thể nếu bạn muốn tạo hệ thống đệm phức tạp hơn . Có một vài quy tắc đơn giản là mà bạn cần tuân thủ để nhận được hướng dẫn sử dụng bộ đệm đôi một cách thủ công .

Trước tiên, không tạo một bộ đệm đệm mới mỗi chu kỳ vẽ. Chỉ tạo hoặc phá hủy bitmap khi thay đổi kích thước máy khách của cửa sổ. Thứ hai, chỉ tạo bitmap có kích thước bạn cần. Xóa pixel mất thời gian và vì vậy nếu có nhiều pixel hơn mức bạn cần, bạn chỉ đang lãng phí các chu kỳ xử lý. Cuối cùng, sử dụng phương thức vẽ đơn giản nhất để sao chép bitmap vào màn hình. DrawImageUnscaled là cách để đi tại đây.

EDIT: Một lý do khác là bạn có thể muốn ứng dụng kiểm soát bộ đệm chứ không phải kiểm soát.

Nguồn: Pro .NET 2.0 Windows Forms and custom controls in C#

+0

Cảm ơn, nhưng tôi đã thực hiện Tìm kiếm trên web :-) –

Các vấn đề liên quan