3Dの座標や移動の計算練習に添付したプログラムを作ってみたのですが、どうしてもうまくいかないことがあります。
矢印キーまたはゲームパッドの右スティックでカメラ位置を動かし、「W・A・S・D」または左スティックでplayerオブジェクトを動かせます。
オブジェクトを動かすときカメラの位置によって進行方向が変わる、という風にしたいのですがどうしてもうまくいきません。
初期状態(angleXZ=180)やangleXZ=0のときは正常な挙動をするのですが、angleXZ=90または270のときA・Dキーの進行方向が逆、パッドはすべて逆(いずれもキャラの向きは正常)という状態になってしまいます。
どうすれば正しい移動をさせることが出来るでしょうか?
3D上の移動について
Re:3D上の移動について
特定の角度でおかしくなるということは符号がおかしいのかもしれませんね。
多分
[color=#d0d0ff" face="monospace]
if(CheckHitKey(KEY_INPUT_D))
PlayerPos=VSub(PlayerPos,VGet(cos(angleXZ*PI/180),0,-sin(angleXZ*PI/180))),angleWA=(angleXZ-90);
if(CheckHitKey(KEY_INPUT_A))
PlayerPos=VAdd(PlayerPos,VGet(cos(angleXZ*PI/180),0,-sin(angleXZ*PI/180))),angleWA=(angleXZ-270);
[/color]
かな?
多分
[color=#d0d0ff" face="monospace]
if(CheckHitKey(KEY_INPUT_D))
PlayerPos=VSub(PlayerPos,VGet(cos(angleXZ*PI/180),0,-sin(angleXZ*PI/180))),angleWA=(angleXZ-90);
if(CheckHitKey(KEY_INPUT_A))
PlayerPos=VAdd(PlayerPos,VGet(cos(angleXZ*PI/180),0,-sin(angleXZ*PI/180))),angleWA=(angleXZ-270);
[/color]
かな?
Re:3D上の移動について
-sinにしてみたところうまくいきました。
これでキー操作は大丈夫です。ありがとうございます。
後はパッドの動作だけなのですが…
軸で条件分岐、キーと条件式を同様にしてみたところ動作はうまいったのですが、自分のやりたい「細かい角度の移動」が出来ません。(斜め移動がすべて45度になるため)
どうすればよいでしょうか?
これでキー操作は大丈夫です。ありがとうございます。
後はパッドの動作だけなのですが…
軸で条件分岐、キーと条件式を同様にしてみたところ動作はうまいったのですが、自分のやりたい「細かい角度の移動」が出来ません。(斜め移動がすべて45度になるため)
どうすればよいでしょうか?
Re:3D上の移動について
>パッドの動作だけなのですが
あー、パッドですね。
結局符号とかの問題ですので、
[color=#d0d0ff" face="monospace]
if(InputY!=0||InputX!=0)
{
angleWA=angleXZ-(int)(GetJoypadAngle(-InputX,InputY)*180/PI);
float jpAngle = GetJoypadAngle(-InputX,-InputY);
PlayerPos=VSub(PlayerPos,VGet(10*sin(jpAngle+angleXZ*PI/180),0,10*cos(jpAngle+angleXZ*PI/180)));
}
[/color]
とか
[color=#d0d0ff" face="monospace]
if(InputY!=0||InputX!=0)
{
angleWA=angleXZ-(int)(GetJoypadAngle(-InputX,InputY)*180/PI);
float jpAngle = GetJoypadAngle2(-InputX,-InputY);
PlayerPos=VAdd(PlayerPos,VGet(-10*sin(jpAngle+angleXZ*PI/180),0,-10*cos(jpAngle+angleXZ*PI/180)));
}
[/color]
とかうごくのではないか、と。
Re:3D上の移動について
if文内を変えてみたところしっかりと動作しました。
結局全部符号の問題だったんですね…
今度から、符号もしっかりチェックしようと思います。
ありがとうございました。
結局全部符号の問題だったんですね…
今度から、符号もしっかりチェックしようと思います。
ありがとうございました。