色々と試していたけれどもどうしても上手く行かないので、絵に書いて考えていた。


要するところに、
 ・左右を押されたときはRotationを変化させるだけにする。
 ・上下が押されたときは、[現在位置]に[移動量]*Rotationで計算した座標を加算する。
 ・モデルのワールド座標にRotation * [計算した座標]を設定する。
ことで、ちゃんと向いている方向に移動するようになった。


ようやく動いた感じです。
動いている動画をとりたいけれども、良いソフトないかなぁ。


ソース的には、


private void HandleInput()に追加
-----------
if(currentKeyboardState.IsKeyDown(Keys.Up)){
tankPosPre += 20f;
}

if(currentKeyboardState.IsKeyDown(Keys.Down)) {
tankPosPre -= 20f;
}
if(currentKeyboardState.IsKeyDown(Keys.Left)) {
tankRot += 0.1f;
}
if(currentKeyboardState.IsKeyDown(Keys.Right)) {
tankRot -= 0.1f;
}
-----------

フィールドを追加
-----------
float tankPosX = 0.0f;
float tankPosZ = 0.0f;
float tankPosPre = 0.0f;
float tankRot = 0.0f;
------------

protected override void Draw()に追加と変更
------------

//初めは自動で回転するようになってるので、キー入力を反映するようにする
Matrix rotation = Matrix.CreateRotationY(tankRot);

//上下キーでZ方向に移動するようにしているので
      //移動Matrixを作成し、向いている方向のベクトル(Matrix)を使って変換する
Matrix movePosition = Matrix.CreateTranslation(0, 0, tankPosPre) * rotation;
    
      //XとZのみ使えればいいのでVectorに変換しておく
Vector3 position = movePosition.Translation;

//現在位置に移動量を加算
tankPosX += position.X;
tankPosZ += position.Z;

//回転させてから、位置を更新する
tank.Draw(
rotation
* Matrix.CreateTranslation(tankPosX, 0, tankPosZ)
, view, projection, rotation);

//移動が終了したので移動量をクリアする
tankPosPre = 0.0f;
------------