OnPaint事件运行缓慢,会引发“阴影”

问题描述

我目前正在尝试通过OnPaint事件在WinForms上绘制一些精灵。我以前使用过一个PictureBox,它可以工作,但是因为我无法处理多个PictureBox的重叠,所以我切换到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的图像进行了尝试)

Shadow

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

非常感谢您!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...