2014-09-24 53 views
0

我正在爲Windows Phone編寫一個太空遊戲,在一些不錯的已停用XNA中。我需要船的速度逐漸降低,直到用戶沒有按住驅動器按鈕時爲零。這聽起來很簡單,但速度是一個Vector2,我不知道如何做到這一點。降低我的太空飛船的速度

 position += velocity; 
     speed = 0.04f; 

     switch (driveBtn.CurrentButtonState) 
     { 
      case ControlButton.ButtonState.Released: 
       //Need to slow down ship when drive is not being held. 
       break; 

      case ControlButton.ButtonState.Pressing: 
       velocity.X += (float)Math.Cos(rotation) * speed; 
       velocity.Y += (float)Math.Sin(rotation) * speed; 
       break; 
     } 
+0

所以只加與船舶運動完全相反的非常小的矢量 – 2014-09-24 19:40:38

+1

如果速度是一個矢量,只需添加'-velocity/factor',其中'factor'是數字值,可以縮放或減慢速度。一旦速度的大小爲零,你停止添加。 – InBetween 2014-09-24 19:45:06

+2

啊,我的錯誤(這是漫長的一天......)但是,您應該將'speed'重命名爲'acceleration'以實現更高的代碼清晰度。 – 2014-09-24 19:49:12

回答

1

請嘗試將速度:

velocity /= 2f; 
+1

你永遠不會達到零! – 2014-09-24 19:41:51

+0

謝謝隊友!這工作:)我必須等待7分鐘,以標記這是一個答案,但生病等待。 – Aido 2014-09-24 19:46:27

+0

@OliverCharlesworth剛剛測試過。從'1'到低於'float.Epsilon'需要150次迭代。在60 fps時爲2.5秒。但是你的「零」定義可能不同...... – Athari 2014-09-24 19:46:33

1

另一種選擇,它可以爲你提供更平滑,更可控的速度,你可以使用線性插值:

float rate = 0.5f; 
velocity = Vector2.Lerp(velocity, Vector2.Zero, rate);