winforms C# WinForm绘图-如何清除和重绘

yqhsw0fo  于 2023-05-23  发布在  C#
关注(0)|答案(2)|浏览(382)

这是我的游戏截图。左边是我的问题,好像“老画”还存在。右边的是它应该是什么。
http://img682.imageshack.us/img682/1058/38995989.jpg
制图代号

Graphics g = e.Graphics;

        for (int i = 1; i < 27; i += 1)
        {
            for (int j = 0; j < 18; j += 1)
            {
                ZPoint zp = zpoints[i, j];

                if (zp != null)
                {
                    g.DrawImage(zp.sprite_index, new Point(zp.x, zp.y));

                    Image arrow;
                    if (zp.sprite_index == spr_green_zpoint)
                    {
                        arrow = spr_green_arrows[zp.image_index];
                    }
                    else if (zp.sprite_index == spr_red_zpoint)
                    {
                        arrow = spr_red_arrows[zp.image_index];
                    }
                    else
                    {
                        arrow = spr_grey_arrows[zp.image_index];
                    }

                    g.DrawImage(arrow, new Point(zp.x - 4, zp.y - 4));
                }
            }
        }

        if (latest_p1 != -1 && latest_p2 != -1)
        {
            ZPoint zp = zpoints[latest_p1, latest_p2];

            if (zp != null)
            {
                g.DrawImage(spr_focus, new Point(zp.x - 6, zp.y - 6));
            }
        }
mftmpeh8

mftmpeh81#

Control类中有几个处理重绘的方法:

  • Invalidate-此方法将控件的特定区域标记为无效,并将在下一次绘制操作中重新绘制该区域
  • Update-此方法触发任何无效区域的重绘
  • Refresh-此方法使控件的整个图面无效并立即重绘它。相当于直接连续调用Invalidate()Update()
ufj5ltwl

ufj5ltwl2#

如果你的游戏从来不给操作系统时间,它可能不会画得很好。那是绘画工作完成的地方。如果插入Invalidate()调用和“Thread.Sleep(0);“插入到代码中你想让它刷新屏幕的地方可能会有帮助。

相关问题