トップページ > 過去ログ > 記事閲覧
キャラ移動について
名前:キーク 日時: 2008/10/18 00:48

質問させて頂きます。 画面上でキャラを移動させたいが為に、時間の関数を用いたのですが、 浅はかな知識故に、使い方が間違っているのか、どこをどういじっても動きません。 何かが欠けているのはわかるのですが、ディスプレイとの睨めっこで終了してしまいます。 時間の経過に伴い、X座標を加算していき、 キャラを移動させたいのですが、動きません。 ご教授頂けたら幸いです。。 #include "DxLib.h" #define speed 3.0 //速さは不変 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); char KeyBuf[256]; int GrHandle[16]; double player_X = 0; int player_Y = 0; int StartTime ; double t = 0; if( DxLib_Init() == -1 ) return -1; while( 1 ) { //キャラを表示 LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , GrHandle ); //現在時刻を取得 StartTime = GetNowCount(); while( 1 ) { //開始経過時間を得る t = (double)(GetNowCount() - StartTime )/1000.0; //座標位置 = 速さ * 時間 player_X = speed * t; //キャラを移動 DrawGraph( player_X , player_Y , GrHandle[1] , TRUE ); break; } /* GetHitKeyStateAll( KeyBuf ); if( KeyBuf[ KEY_INPUT_LEFT ] == 1 ) player_X --; if( KeyBuf[ KEY_INPUT_RIGHT ] == 1 ) player_X ++; if( KeyBuf[ KEY_INPUT_UP ] == 1 ) player_Y --; if( KeyBuf[ KEY_INPUT_DOWN ] == 1 ) player_Y ++; */ if( ProcessMessage() == -1 ) break; } DxLib_End(); return 0; }

Page: 1 |

Re: キャラ移動について ( No.1 )
名前:ライブラリ使用者 日時:2008/10/18 01:34

StartTimeをwhile文の中で取得しているせいですね。 次の処理でもwhileを呼んでいますが、常にbreakを通るのでループしていません。 (むしろ、これが想定外なのかな?) よって、GetNowCount() - StartTime の値が常に10ms程度よって小数点以下切り捨てられて常にt=0となっています。 if(player_X > 300) break; とやればx軸に対して、0→300まで移動のループとなると思います。 一応、上記では無限ループなっちゃいますね。
Re: キャラ移動について ( No.2 )
名前:キーク 日時:2008/10/18 01:55

あ、ありがとうございます!! ほんと、初歩的な質問で申し訳ないです。。 早速チャレンジしてみます!
Re: キャラ移動について ( No.3 )
名前:キーク 日時:2008/10/18 03:07

ごめんなさい、動かないです・・。 試行錯誤したら、余計に混乱してきました。。 #include "DxLib.h" #define v 3.0 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); char KeyBuf[256]; int GrHandle[16]; double player_x = 0.0; int player_y = 0; int StartTime = 0; double t ; if( DxLib_Init() == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , GrHandle ); if( StartTime == 0 ) StartTime = GetNowCount(); t = (double)(GetNowCount() - StartTime )/1000.0; while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( KeyBuf ) && KeyBuf[KEY_INPUT_ESCAPE]==0) { DrawGraph( player_x , player_y , GrHandle[1] , TRUE ); player_x = v * t; if( player_x > 10000 )break; ScreenFlip(); } DxLib_End(); return 0; }
Re: キャラ移動について ( No.4 )
名前:YKN 日時:2008/10/18 10:20

tの計算までwhileの外に出しちゃったら いくらループしてもtの値は動かないから player_xも変わらないのでは。
Re: キャラ移動について ( No.5 )
名前:キーク 日時:2008/10/18 12:17

お返事ありがとうございます。 解決しました。 忠告通り、while文の内にtの計算を打ち込んだら、 無事動きました。 ライブラリ使用者さん、YKNさん、 ありがとうございました。

Page: 1 |