跟踪鼠标移动和幅度
本文关键字:移动 鼠标 跟踪 | 更新日期: 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;
其他三种情况也是如此。
在不设置限制的情况下,任何偏离中心的都将导致炮塔移动。它将一直在移动,并最终在某个地方轨道运行。如果我理解正确的话,这就是您的代码现在所做的。