题
想象一下,你想画一些对象在一个WinForm.你安装一个计时器,以更新国家或模型和复盖涂料的事件的形式。但是从那里,什么是最佳的方式不断地重新绘制的形式的动画?
- 无效的形式尽快完成的图纸?
- 安装的第二个定时器和无效的形式在一定期间隔时间?
- 也许有一个共同的模式对这件事情吗?
- 是否有任何有用的。净类帮助?
每次我需要这样做,我发现一个新的方法有一个新缺点。有什么经验和建议,所以社区?
解决方案
在某些情况下,它的速度更快和更方便不使用油漆的事件,但获得的图象的控制/形式和绘画"上"。这可能会给一些麻烦与透明度/抗混/文本等,但可能价值的麻烦在不具有重新绘制整个shabang.沿线的东西:
private void AnimationTimer_Tick(object sender, EventArgs args)
{
// First paint background, like Clear(Control.Background), or by
// painting an image you have previously buffered that was the background.
animationControl.CreateGraphics().DrawImage(0, 0, animationImages[animationTick++]));
}
我使用这些控制我自己,并有缓冲图像来"清除"的背景与,当感兴趣对象的举动或者需要被删除。
其他提示
我已经创建了一个图书馆,可能帮助这一点。这就是所谓的过渡,并可以在这里找到: http://code.google.com/p/dot-net-transitions/
它使用定时器上运行的背景线的动画中的对象。图书馆的开放源,所以,如果它是使用任何你的,你可以看看码看看它在做什么。
你在做什么是唯一的解决办法的,我曾经用它(一个定时器与常redrawings).还有一堆技术,可以使用使用者的经验,它更顺畅(例如双缓冲)。
你可能要给WPF一个尝试。那是内置设施,这样做的动画在WPF,而且他们更加顺畅(和需要较少的代码并且没有同步上你的一部分)于一个定时器的基础的解决方案。
注意,你不需要使用WPF整个整个的应用程序解决方案;这有可能收拾这个功能并入一个WPF控制和嵌入的控制,在它的应用(或不受管理应用程序,对于这个问题):
不隶属于 StackOverflow