发布动画精灵C#

发布动画精灵C#,c#,animation,sprite,C#,Animation,Sprite,我正在使用Form\u Paint()事件中的e.Graphics.DrawImage绘制图像。我使用计时器刷新表单。问题是动画会闪烁。更新e似乎花费的时间太长。我在表单中有2个PictureBox 想法 更新: public Bitmap Paint(int state, Graphics g) { this.state = state; Bitmap temp; Graphics tempGraphics; t

我正在使用
Form\u Paint()
事件中的
e.Graphics.DrawImage
绘制图像。我使用
计时器
刷新表单。问题是动画会闪烁。更新
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;
        }
    }

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

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


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

在大多数情况下,这是由于未正确设置样式造成的,因此首先绘制背景(通常为白色),然后绘制图像


如果仅仅绘制双缓冲区不够快,也可以使用双缓冲区进行搜索/读取。

我通过避免在表单本身上进行任何动画来解决这个问题。如果将控件添加到窗体,然后设置父对象的动画,则会覆盖UI线程。最好的解决方案是将所有动画保存在PictureBox中


因此:您要么直接使用
g.DrawImage()
设置动画,要么坚持使用
PictureBox

我已经在使用。doublebuffering=true。也许GUI线程忙于处理图片框?我不知道。我不知道你的代码是做什么的。您还可以在最终绘制之前检查背景是否被清除为其他颜色。无论哪种方式,我已经用许多不同的方式和语言进行了双缓冲,我可以向您保证,如果做得正确,将不会出现闪烁。你已经读过我提到的那篇文章了吗?