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的解决方案将解决这两种情况。