想象一下,你想动画在WinForm的一些对象。 你设置一个计时器,更新状态或模型,并覆盖形式的绘画事件。 但是,从那里,什么是不断地重新绘制动画的形式最好方法是什么?
- 一旦失效形式,你做画什么?
- 设置一个第二定时器和无效定期间隔形式?
- 也许有这个东西一个共同的模式?
- 是否有任何有用的.NET类助阵?
每次我需要做的这一点,我发现一个新的缺点的一种新方法。 什么是从SO社区的经验和建议?
想象一下,你想动画在WinForm的一些对象。 你设置一个计时器,更新状态或模型,并覆盖形式的绘画事件。 但是,从那里,什么是不断地重新绘制动画的形式最好方法是什么?
每次我需要做的这一点,我发现一个新的缺点的一种新方法。 什么是从SO社区的经验和建议?
在某些情况下,它的速度更快,更方便不使用描绘事件,但得到的图形从“上”,控制/表格和绘画对象。 这可能给一些麻烦与不透明/抗锯齿/文本等,但可能是值得不必重绘整个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/
它使用在后台线程运行的动画对象的计时器。 该库是开源的,所以如果是使用任何给你,你可以看看代码,看看它在做什么。
你在做什么是我一生中的WinForms使用的唯一的解决办法(恒定redrawings定时器)。 有一堆,你可以使用,使用户的体验它更流畅(如双缓冲)技术。
你可能想给WPF一试。 有在WPF做动画,内置设施,而且他们更平滑(和需要更少的代码,并在您的部分没有同步),比基于定时器的解决方案。
请注意,您不需要使用WPF您整个应用该解决方案; 有可能收拾这个功能集成到一个WPF控件并嵌入在WinForms应用程序的控制(或者非托管的应用程序,对于这个问题):
http://www.codeproject.com/KB/WPF/WPF_UserControls.aspx