使用C#/ Windows窗体的简单animation

我需要在C#/ Windows窗体中为万圣节显示敲出一个快速animation。 只有一些二维形状在一个坚实的背景上移动。 既然这只是一个快速的一次性项目,我真的不想安装和学习一整套新的工具。 (DirectX开发工具包,Silverlight,Flash等)。我也必须安装在多台电脑上,所以超出基本的.Net框架(2.0)将是一个痛苦的屁股。

对于工具我有VS2k8,25年的发展经验,独轮车,大屠杀斗篷,大约2天将其敲除。 在我的Atari 130XE上使用汇编程序之后,我还没有完成animation(用于翻页和玩家/导弹graphics)。

build议吗? 以下是我想知道的一些事情:

  • 我可以通过摆弄它的OnPaint处理程序来绘制任何空的小部件(如面板),对吧? 这就是我如何绘制一个自定义的部件。 有没有比这更好的技术?
  • 在Windows窗体中是否有这种types的页面翻转技术? 我不是在寻找高帧率,就像闪烁/绘图一样必要。

谢谢。

Post Mortem编辑…“几天后编码”

那么这个项目就完成了。 下面的链接派上用场,尽pipe其中有一些是404。(我希望SO会允许多于一个的答复被标记为“正确的”)。 我不得不克服的最大的问题是闪烁,当我试图直接在表单上画一个持续的错误。

  • 对表单使用OnPaint事件:坏主意。 我从来没有那个工作; 大量的神秘错误(堆栈溢出或ArgumentNullExceptions)。 我使用一个大小的面板来填补表格,工作得很好。
  • 无论如何,使用OnPaint方法是很慢的。 我在网上的某处看到,构buildPaintEventArgs的速度很慢,而且不是在开玩笑。 当我放弃这个时,许多闪烁就消失了。 跳过OnPaint / Invalidate()并且自己画一下。
  • 设置窗体上的所有“双缓冲”选项仍然留下一些必须修复的闪烁。 (我发现有冲突的文档说“设置它们在控件上”和“设置它们在窗体上”。井控件没有.SetStyle()方法。)我没有testing没有他们,所以他们可能是做一些事情( this是表格):

      this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); 

所以代码的主力看起来像(面板控制):

  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); } } 

我只是从我的Timer循环中调用PaintPlayField。 没有闪烁。

按照您想要的帧频设置一个定时器。 在每个定时器点击旋转屏幕上的形状的内部表示forms(你的模型),你想要达到的animationanimation,然后调用Invalidate(true) 。 在OnPaint里面只是在屏幕上绘制模型。

哦,是的,你可能想打开双缓冲(这就像自动页面翻转)。

2D游戏入门

基于计时器的animation

这两个都给出了很好的animation例子。 代码相当简单。 当我需要为我的儿子做一个快速的animation时,我使用了这些。