色々と試していたけれどもどうしても上手く行かないので、絵に書いて考えていた。
要するところに、
・左右を押されたときは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;
------------
要するところに、
・左右を押されたときは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;
------------