>> ゲームプログラミング入門トップに戻る
ゲームプログラミングの仕組みについて簡単に説明します。
ゲームで物体が色々動く仕組みとしては、パラパラ漫画と一緒です。
ある物体をまず描画します。
次にその物体を少し右にずらしてまた描画します。
また、少し右にずらして描画します。
また(ry
と、何回も高速で描画していくと物体が動いているように見えるわけです。
これをプログラムで表現することになります。
何回も描画するということは、処理をループさせて、
そのループ内で描画関数を使い、物体を描画させていくことになります。
これを、第2回の講座のコードと組み合わせて表現すると、
コードのイメージとしては以下のようになります。
上記コードのwhile文内にある「ここに処理を色々と書く」と書かれた部分にやりたいことを書くことになります。
今のままだと、ループを抜ける条件を指定していませんが、それも入れる必要があります。
さらに、上記コードだと問題が発生しています。
Windowsで動かすアプリケーションというのは、ウィンドウプロシージャというもので、
ウィンドウメッセージというものを受け取り、常にそのメッセージを処理することで動作しています。
ウィンドウアプリケーションを作るには、そのウィンドウプロシージャの処理も書く必要があるのですが、
上記のコードにはそれが書かれていません。
このままだと、ループ中はその処理しなければならないウィンドウメッセージを処理せずに
動かすことになるので、色々と不具合が発生し、まともに動かなくなってしまいます。
ですので、そのメッセージを処理する必要があるわけです。
この処理をDXライブラリを使わずに書くと、かなりコード量になるのですが、
DXライブラリは一つの関数でこれを解決できます。
ProcessMessage関数を使います。
引数はありません。ウィンドウを閉じたり、何かエラーが発生するとー1を返します。
この関数をループ内に入れて、毎ループごとに処理してあげれば、この問題は解決できます。
コードは以下のようになります。
while文の条件欄にProcessMessageの処理を入れました。
これで毎ループごとに実行されますし、エラーが発生した場合はループを抜けてくれることになります。
今回の説明はここまで。
次回はこのループを使って画像を動かしてみます。
>> 【画像を動かしてみよう】に進む
>> ゲームプログラミング入門トップに戻る
ゲームプログラミングの仕組み
ゲームで物体が色々動く仕組みとしては、パラパラ漫画と一緒です。
ある物体をまず描画します。
次にその物体を少し右にずらしてまた描画します。
また、少し右にずらして描画します。
また(ry
と、何回も高速で描画していくと物体が動いているように見えるわけです。
これをプログラムで表現することになります。
何回も描画するということは、処理をループさせて、
そのループ内で描画関数を使い、物体を描画させていくことになります。
これを、第2回の講座のコードと組み合わせて表現すると、
コードのイメージとしては以下のようになります。
// プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE);//ウィンドウモードに設定 if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } while(1){ //////~~~~~ここに処理を色々と書く~~~~~~ } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
上記コードのwhile文内にある「ここに処理を色々と書く」と書かれた部分にやりたいことを書くことになります。
今のままだと、ループを抜ける条件を指定していませんが、それも入れる必要があります。
さらに、上記コードだと問題が発生しています。
Windowsで動かすアプリケーションというのは、ウィンドウプロシージャというもので、
ウィンドウメッセージというものを受け取り、常にそのメッセージを処理することで動作しています。
ウィンドウアプリケーションを作るには、そのウィンドウプロシージャの処理も書く必要があるのですが、
上記のコードにはそれが書かれていません。
このままだと、ループ中はその処理しなければならないウィンドウメッセージを処理せずに
動かすことになるので、色々と不具合が発生し、まともに動かなくなってしまいます。
ですので、そのメッセージを処理する必要があるわけです。
この処理をDXライブラリを使わずに書くと、かなりコード量になるのですが、
DXライブラリは一つの関数でこれを解決できます。
ProcessMessage関数を使います。
引数はありません。ウィンドウを閉じたり、何かエラーが発生するとー1を返します。
この関数をループ内に入れて、毎ループごとに処理してあげれば、この問題は解決できます。
コードは以下のようになります。
// プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE);//ウィンドウモードに設定 if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } while(ProcessMessage()!=-1){ //~~~ここに処理を書く。 } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
while文の条件欄にProcessMessageの処理を入れました。
これで毎ループごとに実行されますし、エラーが発生した場合はループを抜けてくれることになります。
今回の説明はここまで。
次回はこのループを使って画像を動かしてみます。
>> 【画像を動かしてみよう】に進む
>> ゲームプログラミング入門トップに戻る