我正在編寫一個類似遊戲的太空侵略者,並且我希望能夠通過鼠標和鍵盤移動玩家控制的船隻。使用鍵盤移動船時有一個正在使用的速度常數。當用鼠標移動船隻時,只改變船的位置。當用鍵盤移動船時,鼠標的位置也會改變,以與船的位置一致。如何在XNA中使用鼠標位置的浮點值?
我提到的常量不是一個整型值,而是一個浮點值。這背後的原因是我想增加一個能量來增加船的速度,並且可能不是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));
你可以通過鍵盤控制鼠標的位置,只要船跟隨鼠標? –
我可以,但同樣的問題出現。當使用Mouse.SetPosition方法時,我需要指定int座標,以便船舶新的未來位置的浮點座標變圓。這樣做的效果是,船隻在一個方向上移動的速度比在相反的方向上更快 –
然後我不明白。我以爲你的船每一幀都向着鼠標移動了一段固定的距離? –