跟踪鼠标移动和幅度

本文关键字:移动 鼠标 跟踪 | 更新日期: 2023-09-27 18:27:46

我正在制作一个玩家控制坦克的简单游戏。转台的旋转将由鼠标移动控制。当前代码如下:

if (Game.MouseState.Y < yMovementBorder)
   PossessedTurretPitchValue += dist;
if (Game.MouseState.Y > yMovementBorder)
   PossessedTurretPitchValue -= dist;
if (Game.MouseState.X < xMovementBorder)
   PossessedTurretYaw += rotationDist / 6;
if (Game.MouseState.X > xMovementBorder)
   PossessedTurretYaw -= rotationDist / 6;

xMovementBorder和yMovementBorder是表示游戏屏幕中点的值。问题是鼠标的任何移动都会导致转台转动,直到达到最大俯仰/偏航角。我如何使它能够读取鼠标移动及其幅度(即:鼠标的轻微移动只会导致炮塔的轻微俯仰/偏航移动)?

跟踪鼠标移动和幅度

在更新方法中,应该存储对上一个鼠标状态和当前鼠标状态的引用。然后使用这两个变量来计算自上次更新以来鼠标移动了多少。这需要一些调整才能使其恰到好处,但可以尝试这样的方法:

//define your private variables
private MouseState prevMouseState = null;
private MouseState currMouseState = Game.MouseState;
public void Update(GameTime gt)
{
    prevMouseState = currMouseState;
    currMouseState = Game.MouseState;
    //calculate how much the mouse has moved since the last update
    var dX = currMouseState.X - prevMouseState.X;
    var dY = currMouseState.Y - prevMouseState.Y;
    //do your rotating depending on the values of dX and dY
}

我认为你想做的是根据鼠标离中心的距离设置限制。

类似:

if (Game.MouseState.Y < yMovementBorder)
    if (PossessedTurretPitchValue < yMovementBorder*someFactor)
        PossessedTurretPitchValue += dist;

其他三种情况也是如此。

在不设置限制的情况下,任何偏离中心的都将导致炮塔移动。它将一直在移动,并最终在某个地方轨道运行。如果我理解正确的话,这就是您的代码现在所做的。