问题动画精灵C#

时间:2012-11-30 23:37:08

标签: c# animation sprite

我正在e.Graphics.DrawImage事件中使用Form_Paint()绘制图像。我使用Timer刷新表单。问题是动画闪烁。更新e似乎需要很长时间。我在表单中有2 PictureBox

想法?

更新:

    public Bitmap Paint(int state, Graphics g)
    {
        this.state = state;

        Bitmap temp;
        Graphics tempGraphics;
        temp = new Bitmap(45, 47, g);
        tempGraphics = Graphics.FromImage(temp);

        switch (state)
        {
            case 0:
                tempGraphics.DrawImageUnscaled(img, x, y);
                break;

            case 1:
                tempGraphics.DrawImageUnscaled(img, x, y - 42);
                break;
        }
    }

这会在将精灵添加到表单之前准备精灵。

3 个答案:

答案 0 :(得分:1)

通常管理它的方法是将更新绘制到内存中的位图。然后将位图绘制到屏幕上。进程较慢(因为还有更多工作要做),但它看起来更快,因为没有闪烁。

但是,许多控件实际上会自动为您执行此操作。查看double buffering techniques

答案 1 :(得分:0)

在大多数情况下,它是由于没有正确设置样式而导致的,因此首先绘制背景(通常为白色),然后绘制图像。

如果只是简单地绘制,那么也可以搜索/读取双缓冲。

答案 2 :(得分:0)

我通过避免在表单上做任何动画来解决问题。如果您向窗体添加控件然后为父窗体设置动画,则会覆盖UI线程。最好的解决方案是将所有动画保留在图片框中。

所以:你要么直接用g.DrawImage()制作动画,要么坚持使用PictureBox

相关问题