Tôi hiện đang làm việc trên một trò chơi và tôi muốn có một menu chính với hình nền.Graphics.DrawImage có quá chậm để có hình ảnh lớn hơn không?
Tuy nhiên, tôi thấy phương thức Graphics.DrawImage()
thực sự chậm. Tôi đã thực hiện một số đo lường. Giả sử rằng MenuBackground là hình ảnh tài nguyên của tôi với độ phân giải 800 x 1200 pixel. Tôi sẽ vẽ nó lên một bitmap 800 x 1200 khác (trước tiên tôi render mọi thứ vào một bitmap đệm, sau đó tôi mở rộng nó và cuối cùng vẽ nó lên màn hình - đó là cách tôi xử lý khả năng của các độ phân giải của nhiều người chơi. theo bất kỳ cách nào, xem đoạn tiếp theo).
Vì vậy, tôi đã đo đoạn mã sau:
Stopwatch SW = new Stopwatch();
SW.Start();
// First let's render background image into original-sized bitmap:
OriginalRenderGraphics.DrawImage(Properties.Resources.MenuBackground,
new Rectangle(0, 0, Globals.OriginalScreenWidth, Globals.OriginalScreenHeight));
SW.Stop();
System.Windows.Forms.MessageBox.Show(SW.ElapsedMilliseconds + " milliseconds");
Kết quả là yên tĩnh đáng ngạc nhiên đối với tôi - các biện pháp Stopwatch
một cái gì đó giữa 40 - 50 milliseconds
. Và bởi vì hình nền không phải là thứ duy nhất được vẽ, toàn bộ menu mất khoảng hơn 100 ms để hiển thị, điều này hàm ý sự chậm trễ quan sát được.
Tôi đã cố gắng vẽ nó vào đối tượng Đồ họa do sự kiện Paint đưa ra, nhưng kết quả là 30 - 40 milliseconds
- không có nhiều thay đổi.
Vì vậy, có nghĩa là, Graphics.DrawImage()
không thể sử dụng để vẽ hình ảnh lớn hơn? Nếu vậy, tôi nên làm gì để cải thiện hiệu suất của trò chơi?
Nếu bằng "không sử dụng được", bạn có nghĩa là "chậm như một con ốc trong mật đường", sau đó có. Như những người khác đã nói, hãy thử XNA. Dính vào rendering 2D sprite cho đến khi bạn quen với framework XNA, sau đó chuyển sang 3D nếu bạn nghiêng. – CodeHxr
Tôi upvoting rằng chỉ cho tương tự. :) – Ani