想象一下,你想画一些对象在一个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控制和嵌入的控制,在它的应用(或不受管理应用程序,对于这个问题):

http://www.codeproject.com/KB/WPF/WPF_UserControls.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top