如何在XNA中使用鼠标位置的浮点值?

时间:2012-12-07 15:26:54

标签: c# xna position mouse

我正在编写类似游戏的太空入侵者,我希望能够用鼠标和键盘移动玩家控制的船只。使用键盘移动船舶时,正在使用速度常数。用鼠标移动船只时,只改变船的位置。当用键盘移动船时,鼠标的位置也会改变,以与船的位置一致。

我提到的常量不是int值,而是浮点值。这背后的原因是我想添加一个通电来提高船的速度,这可能是也可能不是int类型。此外,如果玩家要求或游戏难以实现,我希望能够微调速度。问题是,MouseState给了我一对int坐标,但是船的位置是一对浮动坐标。所以这就是问题所在:

每一帧,我需要将船移动到鼠标位置(鼠标控制),每个帧我需要将鼠标位置移动到船上(键盘控制)。由于鼠标给我int坐标,因此从船位置的浮动坐标必须转换为int,这会破坏我之前描述的想法。有什么方法可以强制鼠标使用浮点坐标,XNA或其他API(DirectX或WINAPI)的解决方法?我也正在研究虚拟坐标和屏幕坐标的概念,以及它们之间的转换。

干杯, 亚历

编辑:添加了代码段:

if (_keybState.IsKeyDown(Keys.Right))
{
    Mouse.SetPosition(
    (int)(_player1.GetPlayerPosition().X + Constants.HorizontalMovementSpeed), 
    (int)(_player1.GetPlayerPosition().Y));
}
if (_keybState.IsKeyDown(Keys.Left))
{
    Mouse.SetPosition(
        (int)(_player1.GetPlayerPosition().X - Constants.HorizontalMovementSpeed),
        (int)(_player1.GetPlayerPosition().Y));
}
if (_keybState.IsKeyDown(Keys.Up))
{
    Mouse.SetPosition(
        (int)(_player1.GetPlayerPosition().X ),
        (int)(_player1.GetPlayerPosition().Y - Constants.VerticalMovementSpeed));
}
if (_keybState.IsKeyDown(Keys.Down))
{
    Mouse.SetPosition(
        (int)(_player1.GetPlayerPosition().X),
        (int)(_player1.GetPlayerPosition().Y + Constants.VerticalMovementSpeed));
}
if (_keybState.IsKeyDown(Keys.Space) && _shootKeyPressed == false)
{
    _player1.Shoot();
    _shootKeyPressed = true;
}

_shoboState = Mouse.GetState();
_player1.MovePlayerShipToPosition(new Vector2(_shoboState.X, _shoboState.Y));

1 个答案:

答案 0 :(得分:0)

而不是像这样将鼠标和船位置在一起:

_shoboState = Mouse.GetState();
_player1.MovePlayerShipToPosition(new Vector2(_shoboState.X, _shoboState.Y));

尝试以下几点:

  1. 在鼠标和船舶之间查找单位矢量。这将为您提供从船到鼠标的1个单位步骤。 (你应该能够相当容易地找到这方面的教程)
  2. 将单位矢量乘以您的移动量。这为您提供了移动船只的方向和距离。
  3. 将新矢量应用到您的船上。
  4. 尽可能靠近您的船只的新位置移动鼠标。