2012-02-11 5 views
1

私は車のドライブを上向きの矢印を押すと、私は角度を変更する、左または右の矢印キーを押すと、私は3D車のモデルを移動したい。XNAで3Dオブジェクトを移動する方法は?

これは、更新メソッドのコードです:

float dirX = (float)Math.Sin(angle); 
float dirY = (float)Math.Cos(angle); 

if (Keyboard.GetState().IsKeyDown(Keys.Up)) 
     { 
      position += new Vector3(-dirX, dirY, 0); 

      if (Keyboard.GetState().IsKeyDown(Keys.Left)) 
      { 
       angle += 0.015f; 
      } 

      if (Keyboard.GetState().IsKeyDown(Keys.Right)) 
      { 
       angle -= 0.015f; 
      } 
     } 

は、これは演算部であるが、明らかに私はまた、画面上に車を移動する必要があります。 私は車を前進させたい、上がらないようにしたいので、X軸で90度回転させるべきだと思っていました。また、左または右のキーを押すと車を回転させたいと思っていました。

私はこのコードを書いた:

world = Matrix.CreateTranslation(position) * Matrix.CreateRotationY(angle) * Matrix.CreateFromAxisAngle(Vector3.UnitX, MathHelper.ToRadians(-90)); 

このコードは動作していない、誰もが、私はそれを移動することができますどのように私に言うことができますか?

+0

「このコードは機能していません」より具体的になりますか?何が間違っているのでしょうか? – ChrisF

+0

あなたは実際に車のマトリックスに何かをしていますか? – kevintodisco

+0

ChrisF:私は上を押して左に、車は前方にドライブするが、それ自体の周りを回転する。 ktodisco:車の行列は世界 –

答えて

3

あなたのY軸は実際には「上向き」ではなく、「正面」ではないことに注意してください。この問題は、多くのソリューションがありますが、あなたの問題を解決する最も簡単な方法は、次のとおりです。次に

float dirX = (float)Math.Sin(angle); 
float dirZ = (float)Math.Cos(angle); 

position += new Vector3(dirX, 0, dirZ); 

、あなたが正しい順序であなたの変換行列を掛ける必要があります。

Scale * Rotation * Translation 

あなたのケースでに変換します。

// this will rotate car around the Y axis, and then translate it to correct location 
world = Matrix.CreateRotationY(angle) * Matrix.CreateTranslation(position); 

1つの提案は、Aタイプとして提案し、方向*速度を使用してください。

関連する問題