2014-03-24 125 views
0

我正在製作一個非常簡單的2D遊戲。不幸的是,當我添加圖像時,我遇到了刷新率問題。我使用無效的計時器滴答滴答,它工作正常,直到我將DrawRectangle更改爲DrawImage。屏幕上只有27個對象Paint刷新率平均從穩定64下降到39。我使用的圖像只有2-3kb,所以它們不應該引起問題。請幫我理解這一點。爲什麼以及它是如何發生的?什麼原因和問題以及如何解決它?重繪圖像的最有效方法

完美的罰款:

foreach (Ground _en in game.blocks) 
{ 
    e.Graphics.FillRectangle(Brushes.Green,_en.rec); 
} 

原因丟幀:

foreach (Ground _en in game.blocks) 
{ 
    e.Graphics.DrawImage(Image.FromFile(_en.background), _en.rec); 
} 
+0

您使用Windows Forms嗎? –

回答

3

你從硬盤中調用.FromFile時加載文件到內存()。在實例化過程中將圖像存儲在你的Ground類中(或者只要不是在Draw()中調用它時),這應該是固定的。

+1

+1另外,不要忘記(在這個簡單案例之外)GDI +速度非常慢,您可以考慮使用GDI繪製(至少)圖像,或者如果不只是練習,則放棄GDI +並移動到DirectX或者將GDI +和WinForms全部放在一起並移至WPF)... –

+0

美麗。非常感謝你! –

+0

GDI +比WPF快。主要技巧是使用預乘ARGB位圖格式。 –

相關問題