首页 > 解决方案 > OnPaint 事件很慢并抛出“阴影”

问题描述

我目前正在尝试使用 OnPaint 事件在我的 WinForms 上绘制一些精灵。我之前使用了一个图片框,它可以工作,但是因为我无法处理多个图片框的重叠,所以我切换到了 OnPaint 事件。我环顾互联网,但找不到我的问题的答案。

我拥有的所有精灵都是我项目中的嵌入式资源。我将它们放在“图像”类型的列表中,并在按下某个按钮(KeyEvent)时循环它们。

我有一个看起来像这样的 Timer_Tick 事件:

     private void Timer_Tick(object sender, EventArgs e)
    {
        Invalidate();
    }

我的 OnPaint 方法是这样的:

    protected override void OnPaint(PaintEventArgs e)
    {
        DoubleBuffered = true;

            if (SPRITE_POS == 0)
            DrawSprite(spriteList[SPRITE_POS]);

            if (SPRITE_POS != spriteList.Count - 1)
            SPRITE_POS++;
    }

和 DrawSprite 方法:

    private void DrawSprite(Image img)
    {
        Bitmap bitmap = new Bitmap(img);
        bitmap.SetResolution(60, 60);
        PEA.Graphics.DrawImage(bitmap, P1_X, P1_Y);
    }

出于某种原因,我得到了快速按键的结果(使用来自 MK 的 Sub-Zero 的图像进行了尝试):

阴影

如果没有双缓冲,它会闪烁。使用双缓冲,我在上面得到了这个结果。它抛出“阴影”。是否可以轻松避免这种情况?当新的精灵已经绘制在表单上时,最后一个精灵仍然会显示片刻。

太感谢了!

标签: c#imagewinformsdrawonpaint

解决方案


推荐阅读