1.1 フレーム ゲーム処理の中心となる概念 従来のプログラムの流れ 入力処理は入力が確定するまでずっと待つ ►エンターキー以外は押しても処理は進まない ►入力中は一切他の処理をすることが出来ない (つまりフリーズしてるのと一緒) これはゲームには向いていない ►別の考え方が必要となる 処理 処理 scanf 1.1 フレーム 2 フレームを用いたプログラムの流れ 入力処理は入力の有無を確認したらすぐ終わる ►これを何度も行うことで入力を感知している ►フリーズしたようにはならない これならゲームに向いている これが1フレーム 処理 Check Hit Key 処理 1.1 フレーム Check Hit Key 処理 3 フレームとは ゲームの処理の1単位 ►無限ループの1回分の処理が1フレームにあたる ... if (DxLib_Init()) return -1; while (1) { if (ClearDrawScreen()) break; // ここに処理を書くけど // 今回は何も書かないよ これが1フレーム if (ProcessMessage()) break; } DxLib_End(); ... 1.1 フレーム 4 フレーム内での処理の流れ ... while (1) { if (ClearDrawScreen()) break; 画面消去 演算 // キー入力をチェックして移動処理 if if if if (CheckHitKey(KEY_INPUT_LEFT)) x--; (CheckHitKey(KEY_INPUT_RIGHT)) x++; (CheckHitKey(KEY_INPUT_UP)) y--; (CheckHitKey(KEY_INPUT_DOWN)) y++; 画面描画 // 背景を白で塗りつぶし DrawBox(0, 0, 640, 480, 0xffffff, TRUE); // プレイヤーを画面に表示 LoadGraphScreen(x, y, "player.bmp", FALSE); if (ProcessMessage()) break; } ... 1.1 フレーム ウィンドウ処理 5 画面消去 画面に表示してある内容をすべて消去する ►1つのキャンバスを使いまわして表示している ►毎フレーム最初にすべて消去する必要がある ClearDrawScreen() がその役割を担っている ... while (1) { if (ClearDrawScreen()) break; // キー入力をチェックして移動処理 エラー時は 成功すると0を返すので偽 ... エラーが発生すると-1を返すので真 1.1 フレーム breakする 6 演算 雑多な計算処理を行う ►キー入力の有無の確認 ►キャラクターの座標の変更 (ここでは x や y がそう) ►当たり判定 など ゲームプログラミングでは ►座標の原点は画面左上 ►右下が正方向 となることに注意しよう ... // キー入力をチェックして移動処理 if (CheckHitKey(KEY_INPUT_LEFT)) x--; if (CheckHitKey(KEY_INPUT_RIGHT)) x++; もし左カーソルキーが押されていたら、座標を左に移動 if (CheckHitKey(KEY_INPUT_UP)) y--; if (CheckHitKey(KEY_INPUT_DOWN)) y++; ... 1.1 フレーム 7 画面描画 画面に画像や図形を表示する ►パラパラマンガの要領でアニメーションさせる (座標を毎フレームちょっとずつずらす) コードは上から下へ実行される ►先に描いた画像や図形は上から隠される ... // 背景を白で塗りつぶし DrawBox(0, 0, 640, 480, 0xffffff, TRUE); "player.bmp"を読み込んで、座標(x, y)に表示する // プレイヤーを画面に表示 LoadGraphScreen(x, y, "player.bmp", FALSE); ... 1.1 フレーム 8 ウィンドウ処理 文字通り、ウィンドウの処理を行う (ウィンドウの移動、閉じるボタン など) ►やらないとフリーズするので注意 ProcessMessage() がその役割を担っている ... // 背景を白で塗りつぶし 成功すると0を返すので偽 エラーか DrawBox(0, 0, 640, 480, 0xffffff, TRUE); エラーが発生または 閉じられた時は // プレイヤーを画面に表示 閉じられると-1を返すので真 breakする LoadGraphScreen(x, y, "player.bmp", FALSE); if (ProcessMessage()) break; } ... 1.1 フレーム 9
© Copyright 2024 ExpyDoc