2012-04-30 41 views
0

我最近開始使用XNA進行開發。我可以說我有更多的基本編程語言,但沒有特別的東西。簡單的2D運動

作爲我與XNA的第一個項目。我想創建一個簡單的2D平臺,但目前,我正在嘗試簡單的移動。

我有3個矢量(位置,速度,加速度)和一個簡單的整數(最大速度):

Vector2 pos = new Vector2(200, 200); 
Vector2 vel = new Vector2(20, 20); 
Vector2 acc = new Vector2(30, 30); 
int maxVel = 50; 

然後,我有一些簡單的代碼,在XNA框架的更新方法,得到讓我的精靈招:

// Horizontal Movement 
if (KeybState.IsKeyDown(Keys.Right)) 
{ 
if (vel.X < maxVel) 
vel.X += acc.X * curTime; 
pos.X += vel.X * curTime; 
} 
if (!KeybState.IsKeyDown(Keys.Right) && vel.X > 20) 
{ 
pos.X += vel.X * curTime; 
vel.X -= 1; 
} 

所以,當我按下右箭頭鍵,精靈開始移動。速度從20開始,在加速和遊戲時間的幫助下,增長到maxVel(50),然後當右鍵被釋放時,速度就會下降。它完美的作品。

但是,當我嘗試做了向左方向鍵的同樣的事情,我做POS - =代替POS + =,從而降低了pos.X價值,但它採用的是恆定速度( 20)而不是將它增加到50.

我想我不夠聰明想想爲什麼會發生這種情況,所以一些更好的開發人員的幫助將非常感激。

請注意,我不想看其他地方,我想讓我的版本按預期工作,所以直接的答案是最好的。

+0

您能向我們展示您用於左箭頭鍵的代碼嗎? – Beta

回答

0

你的條件

if (!KeybState.IsKeyDown(Keys.Right) && vel.X > 20) 

VILL是真實的每一個向右的箭頭不按時間(包括在按下左箭頭)和速度高於20,那麼你的代碼及時降低了速回20

您需要檢查是否按鍵(或至少沒有箭頭鍵)以降低速度。最簡單的方法是:

if (!KeybState.IsKeyDown(Keys.Right) && 
    !KeybState.IsKeyDown(Keys.Left) && 
    !KeybState.IsKeyDown(Keys.Up) && 
    !KeybState.IsKeyDown(Keys.Down) && vel.X > 20) 
+0

謝謝,我已經完成了你所說的加上一個方向矢量。無論如何,它按照預期工作:) –