今回はゲーム開発と一般的なアプリケーション開発の違いについて説明をする
決定的な違い
一般的なアプリケーションはイベント駆動型で
ボタンを押したり、メニューを選択した時などのアクションが発生した際に処理を行う。
ゲームは終了するまで永久に回り続けるメインループを作り
ループ内でアクションの発生を確認し、それに応じて処理を行う。
なぜメインループを作るか
これは複数のオブジェクトを同時に動かすためです。
同時に動くオブジェクトが一つ二つ程度であればイベント駆動型でも可能ですが
数が多いと処理が複雑になり管理しきれなくなります。
また、ゲームではリアルタイムな当たり判定を行うことが多々あり
これらを行うにもメインループが必要となります。
イベント駆動型でゲームは作れないか
ゲームが作れないことはありません。
16面パズルや将棋などのゲームであれば、イベント駆動型で作っているものもたくさんあると思います。
状態遷移プログラミング
メインループを作っても、正しく管理が出来なければ結局破綻してしまいます。
状態遷移プログラミングを行うことで、どれだけ規模が大きくなっても破綻しないプログラムを組む事が出来ます。
状態遷移は、大きな括りではタイトルやゲーム、結果などのシーンの切り替えが該当し
小さい括りではプレイヤーの移動中、会話中、攻撃中などの切り替えが該当します。
状態遷移の詳細はネット上にたくさんあります。
初期化、処理、終了化遷移をワンセット
ある状態を作るときに、初期化、処理、終了化の最低3つの遷移を作っておくと、色々と便利です。
開発中はデバッグで一部の遷移を飛ばして現在作成中のところに遷移したり
複数の箇所から、その遷移へ飛ばしたい時などがあるため、初期化遷移を作っておくことで
どこからその遷移へアクセスしても、正常に初期化して動作を行う事が出来ます。
終了化にはその遷移の終了処理と次の遷移への移動処理を記述します。
処理の中身が複雑になって、処理遷移の数を増やしたとしても最終的に終了化に移動することで
正しく終了し、次の遷移へ移動することができるからです。
ブレークポイントを仕掛けて上から追える作りを心がける
ゲーム開発をしていて一番頭を悩ませるのがデバッグとなります。
状態遷移プログラミングでデバッグを行いやすくする方法は、状態遷移を行う場所に制限をかけることです。