2012-02-29 20 views
0

我有幾個公式用於向目標發射子彈,但是當玩家從原始位置移動並且子彈達到預期的玩家舊位置時,它會全部失效。處理拋射物遺漏和彈道

當PlayerPosition == BulletPosition時,如果子彈未命中,該如何讓子彈沿着正確的方向繼續前進?我的問題是,一旦子彈達到它應該停止的位置,我需要一個新的公式來保持它的移動。

如果它擊中了玩家,那很容易,刪除物品,但我似乎無法找到一個好的解決方案。下面是一些代碼,現在它非常簡單。

var movement = PlayerPosition - Position; 
     if (movement != Vector2.Zero) 
      movement.Normalize(); 
     //var angle = Math.Atan2(movement.Y, movement.X); 
     Position += movement*_projectileMoveSpeed; 

回答

1

您是否打算讓子彈的速度受到與玩家距離的影響?

我只是保存速度,然後在未來的幀中使用它。在僞代碼:

to shoot a bullet: 
    direction is sign(PlayerPosition - Position) 
in each frame: 
    for each bullet: 
     modify position by direction * projectileMoveSpeed 
     handle collision (player or screen edge) 
+0

我認爲問題是PlayerPosition永遠不會在我的實例中增加。我認爲解決的辦法是在最後添加PlayerPosition + = My new Vector,所以它永遠無法到達最終位置,並會死在邊緣。 – firebellys 2012-03-01 00:44:59