2010-10-28 88 views
0

好的,我有一艘船可以根據軸上下移動,無論船在哪個方向。XNA - 用鍵盤輸入控制物體

如何使船舶朝向它的方向移動?即如果我的船正面朝東,則鍵向上使其向北而不是向東。

回答

1

你的問題不是很清楚 - 我會假設你正在使用模型和矩陣(而不是SpriteBatch或其他)。所以,猜測 - 我會說你矩陣運算的順序是不正確的。

This answer對類似的問題可能有幫助。

每個矩陣操作發生在原點周圍。因此,如果您在之後做了輪換,您將您的輪船移動到位,您的輪轉也將有效地「旋轉」運動方向。

0

最簡單的方法是使角度和速度可變,因此當您單擊左右鍵時可以更改角度,而當您單擊上下方向鍵時可以改變船舶的速度。

KeyboardState ks; 
    float speed = 0; 
    float angle = 0; 
    protected override void Update(GameTime gameTime) 
    { 
     ks = Keyboard.GetState(); 
     if(ks.IsKeyDown(Keys.Up)) speed += 10; 
     if (ks.IsKeyDown(Keys.Down)) speed -= 10; 
     if (ks.IsKeyDown(Keys.Right)) angle += 10; 
     if (ks.IsKeyDown(Keys.Left)) angle -= 10; 
    } 
0

你需要有方向矢量這樣

Vector3 direction = Vector3.Transform(Vector3.Forward, Matrix.CreateFromYawPitchRoll(yaw, pitch, roll)); 

接下來,讓你的速度矢量

Vector3 velocity = direction * speed; 

而且移動你的船

float time (float) = gameTime.ElapsedTime.TotalSeconds; 
position += velocity * time; 

在這個例子中偏航角度間距保持0