[英]Issue animating sprites C#
我在Form_Paint()
事件中使用e.Graphics.DrawImage
圖像。 我使用Timer
刷新表單。 問題是動畫閃爍。 似乎更新e
花費的時間太長。 我在PictureBox
體內有2 PictureBox
。
有想法嗎?
更新:
public Bitmap Paint(int state, Graphics g)
{
this.state = state;
Bitmap temp;
Graphics tempGraphics;
temp = new Bitmap(45, 47, g);
tempGraphics = Graphics.FromImage(temp);
switch (state)
{
case 0:
tempGraphics.DrawImageUnscaled(img, x, y);
break;
case 1:
tempGraphics.DrawImageUnscaled(img, x, y - 42);
break;
}
}
這將在將精靈添加到表單之前對其進行准備。
通常,通過將更新繪制到內存中的位圖來管理此問題。 然后將位圖繪制到屏幕上。 該過程較慢(因為還有更多工作要做),但它看起來更快,因為沒有閃爍。
但是,許多控件實際上會自動為您執行此操作。 研究雙重緩沖技術 。
在大多數情況下,這是由於未正確設置樣式而導致的,因此首先繪制了背景(通常為白色),然后繪制了圖像。
如果僅繪制圖形還不夠快,還可以在雙緩沖中搜索/讀取。
通過避免在表單本身上進行任何動畫處理,我解決了該問題。 如果將控件添加到窗體,然后為父級設置動畫,則會過度使用UI線程。 最好的解決方案是將所有動畫保留在圖片框中。
因此:您可以直接使用g.DrawImage()
設置動畫,或者堅持使用PictureBox
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.