C# 鼠标移动会留下th图像的痕迹

C# 鼠标移动会留下th图像的痕迹,c#,winforms,C#,Winforms,我做了一个太空入侵者游戏。起初,每当我移动鼠标时,游戏运行缓慢,因为我有一个鼠标移动事件,所以有人告诉我这是我的无效方法。我相应地改变了它,游戏速度更好了。但它现在无法清除旧图像。它留下了图像的痕迹 请帮忙 鼠标移动事件 private void Form1_MouseMove(object sender, MouseEventArgs e) { Cursor.Dispose(); objsp.gsPos = new Point(MousePosi

我做了一个太空入侵者游戏。起初,每当我移动鼠标时,游戏运行缓慢,因为我有一个鼠标移动事件,所以有人告诉我这是我的无效方法。我相应地改变了它,游戏速度更好了。但它现在无法清除旧图像。它留下了图像的痕迹

请帮忙

鼠标移动事件

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        Cursor.Dispose();
        objsp.gsPos = new Point(MousePosition.X / 2 - 10, MousePosition.Y / 2 - 15);
        UpdatePosition(objsp.gsPos.X, objsp.gsPos.Y, objsp.gsImage);
    }
正在调用的更新位置方法

    private void UpdatePosition(int dx, int dy, Image img)
    {            
        Point newPos = new Point(objsp.gsPos.X + dx, objsp.gsPos.Y + dy);

        //dont go out of window boundary
        newPos.X = Math.Max(0, Math.Min(ClientSize.Width - img.Width, newPos.X));
        newPos.Y = Math.Max(0, Math.Min(ClientSize.Height - img.Height, newPos.Y));

        if (newPos != objsp.gsPos)
        {
            objsp.gsPos = newPos;
            Rectangle rc = new Rectangle(objsp.gsPos, img.Size);
            Invalidate(rc);               
        }
    }
表单加载输出

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        Cursor.Dispose();
        objsp.gsPos = new Point(MousePosition.X / 2 - 10, MousePosition.Y / 2 - 15);
        UpdatePosition(objsp.gsPos.X, objsp.gsPos.Y, objsp.gsImage);
    }
移动鼠标后输出

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        Cursor.Dispose();
        objsp.gsPos = new Point(MousePosition.X / 2 - 10, MousePosition.Y / 2 - 15);
        UpdatePosition(objsp.gsPos.X, objsp.gsPos.Y, objsp.gsImage);
    }

UpdatePosition
中,使当前和以前的鼠标位置无效。

我打赌您的绘制处理程序没有重新绘制它被要求重新绘制的私有void Form1\u paint(对象发送器,PaintEventArgs e){e.Graphics.DrawImage(objsp.gsImage,objsp.gsPos.X,objsp.gsPos.Y,objsp.gsImage.Width,objsp.gsImage.Height);}看起来您没有更新完整的regionprivate void Form1_Paint(object sender,PaintEventArgs e){e.Graphics.DrawImage(objsp.gsImage、objsp.gsPos.X、objsp.gsPos.Y、objsp.gsImage.Width、objsp.gsImage.Height);}我注意到,当至少10名入侵者被击毙时,游戏运行正常…现在处于困惑状态。最有可能的原因是,画画越少意味着处理速度越快。在精灵移动很远之前,每一幅画都来得越快。MagnatLU的解决方案将解决这两种情况。