Re: フライトゲームに ( No.1 ) |
- 名前:獅子 日時:2012/01/18 07:55
「モデルの向きに移動」ではなくて「向きにモデルを回転」するほうが楽かと…
変数で向きを記録してモデルはそれに合わせて方向を変える。
キーを押して直接モデルを回転させるのでもできなくはないと思いますが
結局向いている方向は取得する必要があると思いますし。
あと、どのようにすればできますか?ではなにが分からないのか分かりません
もう少し具体的に何が分からないのか教えてください…
|
Re: フライトゲームについて。 ( No.2 ) |
- 名前:Mr.K 日時:2012/01/18 20:13
説明不足でした。
詳しく書くと、「モデルの向いている方向に自動で移動」です。
何もしなくてもモデルが前に進むようにしたいんです。
モデルを回転させたら回転させた方向に自動で進む
といった感じです。
自分なりに作ってみて、回転させると蟹歩き状態になってしまいました。まだ知識不足でして..。
わかりにくい質問ですいません。
|
Re: フライトゲームについて。 ( No.3 ) |
- 名前:いっち 日時:2012/01/18 22:14
「DXライブラリ サンプルプログラム」の「32.3Dアクション基本」はご覧になりましたでしょうか?
このサンプルはカメラの向きではなくモデルの向きに移動します。
> h t t p : / / homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3DAction.html
|
Re: フライトゲームについて。 ( No.4 ) |
- 名前:獅子 日時:2012/01/19 16:50
>自分なりに作ってみて、回転させると蟹歩き状態になってしまいました。
一応一定の向きに進める事はできているのですね?
ならその処理にベクトルを入れればよいかと。
いっちさんがリンクされた先のコードを例にすると、
// プレイヤー情報構造体
struct PLAYER
{
VECTOR Position ; // 座標
VECTOR TargetMoveDirection ; // モデルが向くべき方向のベクトル
float Angle ; // モデルが向いている方向の角度
float JumpPower ; // Y軸方向の速度
//
このような構造体で情報を管理しています。VECTOR型はご存知かもしれませんが、x,y,zの要素をもつ構造体です。
↑が押されたらムーブベクトルを加算、
← を加算、
→ をマイナスに加算、
↓ をマイナスに加算、
正規化したら(全部確認したら)実際にTargetMoveDirectionに代入
していますね
また、角度ですが、回転ができているということはアングルは取得できているのですよね?
その現在の角度とは別に、目標となる角度が要ります。
目標のベクトルはatan2関数を使用しています。これはmath.hに入っています。
atan2は、–π〜πラジアンの範囲で、y/x のアークタンジェントを返します。
出たラジアンを処理してモデルに反映させれば言いと思います。
ここで重要なのは、ベクトルからアングルを求めていることです。
とりあえずこのリンク先のコードを真似して(カメラを参考にしないから簡単ということは無いと思いますから注意。)、
まずは好きな方向に移動できるようにしてください。
自動で移動するようにしたければ、常に(プレイヤーの)前方向のみベクトルを加算し続ければ言いだけだと思います。
とりあえず、「モデルの向いている方向を算出する」ことに集中して、実際にモデルを回転させるのは後回しにしてください。
回転の処理はモデルの向きから計算するように書き直せば大丈夫だと思います。
もし何か勘違いしてたらすみません
|
Re: フライトゲームについて。 ( No.5 ) |
- 名前:Mr.K 日時:2012/01/19 18:25
獅子さん、いっちさん
ありがとうございます。
がんばってみます。<m(_ _)m>
|