当前位置:  开发笔记 > 编程语言 > 正文

使用C#/ Windows Forms的简单动画

如何解决《使用C#/WindowsForms的简单动画》经验,为你挑选了2个好方法。

我需要在C#/ Windows Forms中敲出一个快速动画来进行万圣节显示.只是一些2D形状在坚实的背景上移动.由于这只是一个快速的一次性项目,我真的不想安装和学习一整套新的工具.(DirectX开发工具包,Silverlight,Flash等.)我还必须在多台计算机上安装它,因此除了基本的.Net框架(2.0)之外的任何东西都会让人痛苦.

对于工具,我有VS2k8,25年的开发经验,独轮车,大屠杀斗篷,大约2天就可以解决这个问题.自从在我的Atari 130XE上使用汇编程序以来,我没有完成动画(对于页面翻转和播放器/导弹图形来说很好!)

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

我可以通过摆弄它的OnPaint处理程序来绘制任何空的小部件(如面板),对吗?这就是我绘制自定义小部件的方式.有没有比这更好的技术?

在Windows窗体中是否存在针对此类事物的页面翻转技术?我不是在寻找高帧速率,只需要根据需要进行少量闪烁/绘图.

谢谢.

Post Mortem Edit ..."几天后编码"

好吧,项目已经完成.下面的链接派上用场,虽然其中有几个是404.(我希望SO允许不止一个回复被标记为"正确").我必须克服的最大问题是闪烁,当我试图直接在表单上绘制时,这是一个持久的错误.

使用Form的OnPaint事件:坏主意.我从来没有这样做过; 许多神秘错误(堆栈溢出或ArgumentNullExceptions).我最后使用一个尺寸适合填充表格的面板,工作正常.

无论如何,使用OnPaint方法很慢.我在网上看到,构建PaintEventArgs的速度很慢,并且他们不是在开玩笑.当我抛弃它时,很多闪烁消失了.跳过OnPaint/Invalidate()并自己绘制它.

设置表单上的所有"双缓冲"选项仍然留下一些必须修复的闪烁.(我发现有冲突的文档说"将它们设置在控件上"并"将它们设置在窗体上".好的控件没有.SetStyle()方法.)我没有测试它们,所以它们可能是做某事(this是形式):

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

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

    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.根本没有闪烁.



1> Nick..:

以您想要的帧速率启动计时器.在每个计时器中,根据您想要实现的动画运动,在屏幕(您的模型)上旋转形状的内部表示,然后调用Invalidate(true).在OnPaint内部只需在屏幕上绘制模型.

哦是的,你可能想要打开Double Buffering(这就像自动页面翻转一样).



2> StubbornMule..:

2d游戏入门

基于计时器的动画

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

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有