3D上の移動について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
3D初心者

3D上の移動について

#1

投稿記事 by 3D初心者 » 16年前

3Dの座標や移動の計算練習に添付したプログラムを作ってみたのですが、どうしてもうまくいかないことがあります。

矢印キーまたはゲームパッドの右スティックでカメラ位置を動かし、「W・A・S・D」または左スティックでplayerオブジェクトを動かせます。

オブジェクトを動かすときカメラの位置によって進行方向が変わる、という風にしたいのですがどうしてもうまくいきません。

初期状態(angleXZ=180)やangleXZ=0のときは正常な挙動をするのですが、angleXZ=90または270のときA・Dキーの進行方向が逆、パッドはすべて逆(いずれもキャラの向きは正常)という状態になってしまいます。

どうすれば正しい移動をさせることが出来るでしょうか?

Justy

Re:3D上の移動について

#2

投稿記事 by Justy » 16年前

 特定の角度でおかしくなるということは符号がおかしいのかもしれませんね。

 多分
[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]

かな?

3D初心者

Re:3D上の移動について

#3

投稿記事 by 3D初心者 » 16年前

-sinにしてみたところうまくいきました。
これでキー操作は大丈夫です。ありがとうございます。

後はパッドの動作だけなのですが…
軸で条件分岐、キーと条件式を同様にしてみたところ動作はうまいったのですが、自分のやりたい「細かい角度の移動」が出来ません。(斜め移動がすべて45度になるため)
どうすればよいでしょうか?

Justy

Re:3D上の移動について

#4

投稿記事 by Justy » 16年前


>パッドの動作だけなのですが

 あー、パッドですね。
 結局符号とかの問題ですので、

[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]

とかうごくのではないか、と。

3D初心者

Re:3D上の移動について

#5

投稿記事 by 3D初心者 » 16年前

if文内を変えてみたところしっかりと動作しました。

結局全部符号の問題だったんですね…
今度から、符号もしっかりチェックしようと思います。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る