
Simple animation in WinForms假设您要为WinForm上的某些对象设置动画。 您设置了一个计时器来更新状态或模型,并覆盖窗体的绘制事件。 但是从那里开始,为动画连续重新绘制窗体的最佳方法是什么?
每次我需要这样做时,我都会发现具有新缺点的新方法。 SO社区有哪些经验和建议? 我创建了一个库可能对此有所帮助。它称为过渡,可以在以下位置找到:https://github.com/UweKeim/dot-net-transitions。在nuget上作为dot-net-transitions包提供 它使用在后台线程上运行的计时器为对象设置动画。该库是开源的,因此,如果对您有用,则可以查看代码以查看其作用。 在某些情况下,不使用paint事件进行绘制,而是从控件/窗体获取Graphics对象并在其上进行绘制,这样会更快,更方便。这可能会给不透明度/反锯齿/文本等带来一些麻烦,但是在不必重新绘制整个shabang方面值得考虑。类似于以下内容:
我本人在某些控件中使用了此控件,并在感兴趣的对象移动或需要删除时缓冲了图像以"清除"背景。 您正在做的事情是我在WinForms(具有不断重绘的计时器)中使用过的唯一解决方案。您可以使用多种技术使用户的使用体验更加流畅(例如双缓冲)。 您可能想尝试一下WPF。有内置的功能可以在WPF中制作动画,它们比基于计时器的解决方案更流畅(并且需要更少的代码,并且不需要同步)。 请注意,对于该解决方案,您无需在整个应用程序中使用WPF;可以将此功能打包到WPF控件中,然后将该控件嵌入WinForms应用程序(或非托管应用程序)中: http://www.codeproject.com/KB/WPF/WPF_UserControls.aspx |