我需要在C#/ Windows窗體中爲萬聖節顯示敲出一個快速動畫。只有一些2D圖形在堅實的背景上移動。由於這只是一個快速的一次性項目,我不想爲此安裝和學習一整套新工具。 (DirectX開發工具包,Silverlight,Flash等)。我還必須在多臺計算機上安裝它,因此超出基本.Net框架(2.0)的任何內容都將是一件痛苦的事情。使用C#/ Windows窗體的簡單動畫
對於工具我有VS2k8,25年的發展經驗,獨輪車,大屠殺斗篷,大約2天將其敲除。自從在我的Atari 130XE上使用匯編程序以來,我還沒有完成動畫(用於頁面翻轉和播放器/導彈圖形的萬歲!)
建議?這裏有一些我想知道的事情:
- 我可以通過擺弄它的OnPaint處理程序來繪製任何空的小部件(如面板),對不對?這就是我如何繪製自定義小部件。有沒有比這更好的技術?
- 在Windows窗體中是否有這種類型的頁面翻轉技術?我不是在尋找高幀頻,就像必要的閃爍/繪圖一樣。
謝謝。
驗屍編輯...「一對夫婦編碼天后的」
那麼,該項目已經完成。下面的鏈接派上用場,雖然其中有一些是404。(我希望SO會允許多於一個的回覆被標記爲「正確」)。我必須克服的最大問題是閃爍,並且當我試圖直接在表單上繪製時出現持續性錯誤。
- 對錶單使用OnPaint事件:壞主意。我從來沒有這樣做的工作;大量的神祕錯誤(堆棧溢出或ArgumentNullExceptions)。我使用一個大小適合填寫表格並且工作正常的面板。
- 無論如何,使用OnPaint方法都很慢。我在網上的某處看到,構建PaintEventArgs的速度很慢,而且他們不是在開玩笑。當我放棄這個時,許多閃爍就消失了。跳過OnPaint/Invalidate()並且自己繪製它。
設置窗體上的所有「雙緩衝」選項仍然會留下一些必須修復的閃爍。 (我發現相互衝突的文檔說「設置它們在控件上」和「將它們設置在窗體上」。井控件沒有.SetStyle()方法。)我沒有測試沒有它們,所以它們可能是做一些事情(
this
的形式):this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
因此,代碼的主力傷口看起來像(pf
是面板控制):
void PaintPlayField()
{
Bitmap bufl = new Bitmap(pf.Width, pf.Height);
using (Graphics g = Graphics.FromImage(bufl))
{
g.FillRectangle(Brushes.Black, new Rectangle(0, 0, pf.Width, pf.Height));
DrawItems(g);
DrawMoreItems(g);
pf.CreateGraphics().DrawImageUnscaled(bufl, 0, 0);
}
}
我只是叫PaintPlayField從我的Timer循環的內部。沒有閃爍。
請參閱相關的[winforms中的簡單動畫問題](http://stackoverflow.com/questions/11318/simple-animation-in-winforms)。 – 2008-10-12 07:18:22