2012-12-07 74 views
0

我正在編寫一個類似遊戲的太空侵略者,並且我希望能夠通過鼠標和鍵盤移動玩家控制的船隻。使用鍵盤移動船時有一個正在使用的速度常數。當用鼠標移動船隻時,只改變船的位置。當用鍵盤移動船時,鼠標的位置也會改變,以與船的位置一致。如何在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)); 
+0

你可以通過鍵盤控制鼠標的位置,只要船跟隨鼠標? –

+0

我可以,但同樣的問題出現。當使用Mouse.SetPosition方法時,我需要指定int座標,以便船舶新的未來位置的浮點座標變圓。這樣做的效果是,船隻在一個方向上移動的速度比在相反的方向上更快 –

+0

然後我不明白。我以爲你的船每一幀都向着鼠標移動了一段固定的距離? –

回答

0

而不是捆綁的鼠標和船舶位置在一起,就像這樣:

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

嘗試沿着這些路線的東西:

  1. 查找鼠標和船之間的單位矢量。這將使你從你的船到你的鼠標1步。 (你應該能夠很容易地找到這個教程)
  2. 將單位矢量乘以你的移動量。這給你一個方向和距離,你移動你的船。
  3. 將適當的矢量圖應用到您的船。
  4. 移動鼠標儘可能靠近你的船的新位置。
+0

問題是,我實際上[我]要[/ i]使用浮點數。當使用速度上電,例如,將速度從2更改爲3時,更改實際上非常高,因此在我的情況下,處理浮點數是必須的。 –