我正在编写类似游戏的太空入侵者,我希望能够用鼠标和键盘移动玩家控制的船只。使用键盘移动船舶时,正在使用速度常数。用鼠标移动船只时,只改变船的位置。当用键盘移动船时,鼠标的位置也会改变,以与船的位置一致。
我提到的常量不是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));
答案 0 :(得分:0)
而不是像这样将鼠标和船位置在一起:
_shoboState = Mouse.GetState();
_player1.MovePlayerShipToPosition(new Vector2(_shoboState.X, _shoboState.Y));
尝试以下几点: