>> ゲームプログラミング入門トップに戻る

メインループの骨格を完成させよう

色々とメインループでは必ず実行しなくてはならないものが増えてきたので、
ここで必要なものをまとめたメインループの骨格を完成させましょう。
必要な関数は、
ProcessMessage
ScreeFlip
ClearDrawScreen

でしたよね?
ですがキーボードの状態も毎ループごとに取得しておく必要があると思うので、
まとめて取得できる、GetHitKeyStateAll関数も実行するようにしましょう。

するとメインループは、

	while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll(key)==0){
		~~~~~ここに好きな処理を書く~~~~
	}
	

こんな感じになります。
これで毎回ウィンドウメッセージは処理できますし、表画面への反映、裏画面の消去、キーの取得が
まとめて行えます。
戻り値が0以外でエラーだと、ループを抜けることが出来るわけです。

では今度は、このループを使って画像をキーボードのキーを使って動かせるようにしてみましょう。
以下のコードを見てください。

#include "DxLib.h"

// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
	ChangeWindowMode(TRUE);

	if( DxLib_Init() == -1 )		// DXライブラリ初期化処理
	{
		return -1 ;			// エラーが起きたら直ちに終了
	}

	//グラフィックハンドル
	int gh;

	//キー取得用配列
	char key[256];

	//x座標
	int x=300,y=240;

	//画像読み込み
	gh = LoadGraph("char.png");
	
	//描画先を裏画面に設定
	SetDrawScreen(DX_SCREEN_BACK);

	while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll(key)==0){

		DrawGraph(x,y,gh,TRUE);

		if(key[KEY_INPUT_LEFT]==1){
			x-=6;
		}
		if(key[KEY_INPUT_RIGHT]==1){
			x+=6;
		}
		if(key[KEY_INPUT_UP]==1){
			y-=6;
		}
		if(key[KEY_INPUT_DOWN]==1){
			y+=6;
		}

		if(key[KEY_INPUT_ESCAPE]==1){
			break;
		}
		
	}

	DxLib_End() ;				// DXライブラリ使用の終了処理

	return 0 ;				// ソフトの終了 
}

コレを実行すると下記の動画のようなことが出来ます。

画像は前の講座でも使ったchar.pngを使っています。
キーボードの上下左右でキャラの移動が出来るようにしています。

コードを見てください。
最初にx,y座標の初期値を設定し、
画像を読み込んでグラフィックハンドルを取得しています。
その後描画先を裏画面に設定し、メインループに入ります。
ループ内では、DrawGraph関数で描画を行っています。
キーボードの上下左右のキーが押されると、
それぞれ座標の増減を行っています。
左キーが押されるとX座標を減らし、右キーが押されるとX座標を増加。
上キーが押されるとY座標を減らし、下キーが押されるとY座標を増加してます。
2章でも説明しましたが、画面左上の座標が(0,0)で、
X座標は右に行くと増加し、Y座標は下に行くほど増加します。
これらの座標を毎回DrawGraphに渡して描画することで、動かしながら描画することができます。
コードにも書いてあるとおり、エスケープキーを押したらループを抜けて終了するようにしています。

この形がゲームプログラミングで使う、メインループの骨格になります。
この章までマスターしてしまえば、簡単なゲームぐらいは作れるようになっているはずです。
ゲームプログラミングは自分で色々実験してみることが大切です。
積極的にチャレンジして、分からなければ質問する、というスタンスで進めていくと良いでしょう。

以上で基本編の講座は終わりです。
これからは各カテゴリで必要なものを勉強していってください。

>> ゲームプログラミング入門トップに戻る