DXライブラリ キャラクターの移動について
Posted: 2011年10月30日(日) 11:56
はじめまして。
現在、DXライブラリで3Dゲームを作っている者です。
そこで、3Dゲーム内でプレーヤーが操作するキャラクターの移動ついて質問があります。
UPキーを押すとz軸正の方向に移動、DOWNキーを押すとz軸負の向きに移動、
RIGHTキーを押すとx軸正の方向に移動、LEFTキーを押すとx軸負の方向に移動、
というのは、下記のように記述することで実現できたのですが、
RIGHTキーを押すと、キャラクターの向きがy軸を軸としてに時計回りに
LEFTキーを押すと、キャラクターの向きがy軸を軸として反時計回りに
回転し、
UPキーを押すと、キャラクターが向いている方向に移動、
DOWNキーを押すと、キャラクターが向いている方向とは正反対の向きにキャラクターを向ける
ということがなかなか実現できません。
どのようなコードを書けば、上に書いたような動きを実現することが出来るのでしょうか?
出来れば、実際にコードを書いていただけるととても助かります。
回答、よろしくお願いします。
現在、DXライブラリで3Dゲームを作っている者です。
そこで、3Dゲーム内でプレーヤーが操作するキャラクターの移動ついて質問があります。
UPキーを押すとz軸正の方向に移動、DOWNキーを押すとz軸負の向きに移動、
RIGHTキーを押すとx軸正の方向に移動、LEFTキーを押すとx軸負の方向に移動、
というのは、下記のように記述することで実現できたのですが、
#include "DxLib.h"
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE); // ウィンドウモードに設定
SetGraphMode( 1200 , 675 , 32 ) ;// 画面モードの変更
DxLib_Init(); // DXライブラリ初期化処理;
int ModelHandle;
float x=0, y=0 ,z=0,cx=400,cy=400,cz=-400;
VECTOR CameraPos;
ModelHandle = MV1LoadModel( "画像/Sample.x" ) ;// 3Dモデルの読み込み
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの更新):ゲーム本編
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
if( Key[ KEY_INPUT_RIGHT ] >= 1 ){ // 右キーが押されていたら
x+=10; // 右へ移動
}
if( Key[ KEY_INPUT_LEFT ] >= 1 ){ // 左キーが押されていたら
x-=10; //左へ移動
}
if( Key[ KEY_INPUT_UP ] >= 1 ){ // 上キーが押されていたら
z+=10; // 前へ移動;
}
if( Key[ KEY_INPUT_DOWN ] >= 1 ){ // 上キーが押されていたら
z-=10; // 後ろへ移動;
}
MV1DrawModel( ModelHandle ) ;// 3Dモデルの描画
MV1SetPosition( ModelHandle, VGet( x, y, z) ) ;// 画面に映る位置に3Dモデルを移動
MV1SetScale( ModelHandle, VGet( 100.0f, 100.0f, 100.0f ) ) ;// 3Dモデルのスケールをx,y,z軸方向に100倍にする
}
// カメラの座標を初期化
CameraPos.x = cx ;
CameraPos.y = cy ;
CameraPos.z = cz ;
SetCameraPositionAndTarget_UpVecY( CameraPos, VGet( 0, 0, 0 ) ) ;// カメラの位置と注視点をセット
WaitKey();// キー入力待ち
DxLib_End();// DXライブラリ終了処理
return 0;
}
RIGHTキーを押すと、キャラクターの向きがy軸を軸としてに時計回りに
LEFTキーを押すと、キャラクターの向きがy軸を軸として反時計回りに
回転し、
UPキーを押すと、キャラクターが向いている方向に移動、
DOWNキーを押すと、キャラクターが向いている方向とは正反対の向きにキャラクターを向ける
ということがなかなか実現できません。
どのようなコードを書けば、上に書いたような動きを実現することが出来るのでしょうか?
出来れば、実際にコードを書いていただけるととても助かります。
回答、よろしくお願いします。