2010-07-17 87 views
3

我想在XNA遊戲中實現彈道軌跡,並試圖找出讓拋射體跟隨重力曲線的最佳方式。沿着XNA的曲線路徑動畫雪碧

我能想到的最好的事情就是先計算曲線並存儲在「Curve」類中。然後讓精靈沿着這條曲線移動。

但我真的不知道如何實際上沿着該曲線移動精靈。

我該怎麼做,還是隻有更好的方法?

回答

9

基本上你想使用你的高中物理equations of motion(維基百科文章)。

對於拋運動,這是重要的方程:

s = s₀ + v₀t + ½at² 

(位移等於:初始位移,加初始速度乘以時間,加上一半加速度乘以時間的平方)

假設你有一個在2D中移動的拋射體。你基本上爲每個維度運行這個方程。在X方向上,你將有一個初始位置和一些初始速度但沒有加速度。

在Y方向上,您將獲得初始位置,初始速度以及由於重力而向下的加速度。

所有你需要做的就是追蹤自射彈開始以來的時間,並在計算出的位置繪製你的精靈。

下面是一些粗糙的XNA代碼 - 你可以看到我可以在一次計算兩個座標軸:

Vector2 initialPosition = Vector2.Zero; 
Vector2 initialVelocity = new Vector2(10, 10); // Choose values that work for you 
Vector2 acceleration = new Vector2(0, -9.8f); 

float time = 0; 
Vector2 position = Vector2.Zero; // Use this when drawing your sprite 

public override void Update(GameTime gameTime) 
{ 
    time += (float)gameTime.ElapsedGameTime.TotalSeconds; 

    position = initialPosition + initialVelocity * time 
       + 0.5f * acceleration * time * time; 
} 

隨着一點點代數,你可以用運動的那些相同的方程做的事情一樣計算什麼速度來發射你的炮彈來擊中某個特定點。

+0

太棒了。工作得很好。但任何想法如何添加一個初始角度呢?例如,如果彈丸以0.5弧度發射? – 2010-07-18 15:50:12

+0

@亞當:這是簡單的三角:'initialVelocity =(cos(0.5),sin(0.5))* 100' – 2010-07-19 06:56:30

+0

謝謝,我終於弄明白了。我遇到的問題是我沒有意識到XNA trig方法正在尋找弧度而不是度數......所以我錯誤地將它們全部轉換爲度數。 – 2010-07-19 12:42:07