鼠标移动会减慢游戏速度

本文关键字:游戏 速度 移动 鼠标 | 更新日期: 2023-09-27 18:15:54

我正在开发一款带有mouse_move事件的太空入侵者游戏。它可以工作,但是当我移动鼠标时,一切都变慢了。入侵者和其他东西停止移动,直到你停止移动鼠标

谁能解释一下为什么,怎么解决这个问题?

谢谢

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;
        Invalidate();
    }
}

鼠标移动会减慢游戏速度

您可能在mouse_move处理程序中做了太多的工作。既然你没有提供代码,这是我能提供的最好的建议。

你必须小心你在这样的处理程序中所做的事情。当拖动鼠标时,鼠标移动会被触发很多次。在那种情况下,你应该尽量少做。

如果你发布你的代码,我们可以进一步帮助,但在那之前,我们没有足够的信息来给你一个坚实的修复

编辑:

现在你已经发布了代码,我看到你在每个鼠标移动事件中调用Invalidate()。你不断地重新绘制整个形式。这么频繁地表演,工作量太大了。你需要对你重画的东西更聪明一点。

第一步尝试只使需要重新绘制的区域无效。这应该会有很大帮助。Invalidate()将接受Rectangle作为参数,使用它。

也许不要在每次事件触发时都运行代码。可以将其限制为每隔5次事件触发或每100毫秒运行一次代码。

嗯,有很多原因会导致这种情况的发生,如果不看代码,很难判断是哪一个原因。

最常见的原因是事件处理程序接管了执行并导致所有事情都等待它。解决方案通常意味着让你的代码更高效。