ゲームループ
■ゲームループ
ゲームはゲーム内容を画面に表示するために一定間隔ごとに 「ゲーム処理」と「描画処理」を行っています。 この一定間隔の「ゲーム処理」と「描画処理」を繰り返すことを ゲームループと呼びます。①.初期化 DirectXやDxLib、OpenGLなどのゲームを開始する上で必要な 初期化処理を実行します。 ②.ゲームループ ゲームループはゲームが終了するまで繰り返されます。 2-1.ゲーム処理 ゲーム処理はその名前の通り、プレイヤーや敵、UIやエフェクトなど ゲームを動かすためのオブジェクトに対する処理を行います。 2-2.描画処理 描画処理は「ゲーム処理」の結果を画面に反映するための処理です。 ③.終了 ゲームを終了したので、①で作成したライブラリなどの解放処理を行います。 ●FPS(Frames Per Second) FPSとは1秒間に何回フレーム処理(ゲーム処理と描画処理)を行うかを表した単位のことです。 例えば60FPSでは1秒間に60回フレーム処理(ゲーム処理と描画処理)を実行します。 ・フレーム フレームとはゲームループの繰り返し回数に使用する単位です。 1フレーム中に「ゲーム処理」「描画処理」を1回ずつ実行します。 ・処理時間制御 FPSを実現するためには一定間隔で処理を実行できるように 処理時間を制御する必要があります。 例: 60FPS => 1フレームを約0.016秒(16ms)間隔で実行 30FPS => 1フレームを約0.032秒(32ms)間隔で実行 1フレームで行う処理がきっちりFPSの間隔にあわせて終わることはありません。 早く終わった場合は次のフレームの開始時間になるまで処理を停止させます。 もし時間がかかりすぎた場合、「処理落ち」と呼ばれる現象が発生します。 これを回避するために「フレームスキップ」や処理の内容を見直し、 速度向上を実現する必要があります。 ・処理落ち 処理落ちとは1フレーム内でかかった処理時間がFPSの処理周期時間を 超えてしまった際に発生する現象です。 主な現象: ゲーム画面の止まる 処理の遅延が発生するので描画の更新が遅れ、画面が一瞬止まります。 発生頻度が高いとコマ送りで動いているようになります。 時間の誤差 時間計測は処理的コストが高いとされているので、 ゲームではよくフレーム数で時間を計ります。 処理落ちが発生すると処理落ちの頻度の分タイマーとしての 精度が落ちることになります。 ・フレームスキップ フレームスキップとは処理落ちが発生した際の対応策です。 内容は時間をオーバーした分の調整として本来の時間に戻るまで ゲーム処理だけを行い描画処理は実行を行わないというものです。 描画処理が停止するので画面の内容がいきなりスキップします。 メリット: ・時間の誤差が少なくなる 周期時間を越えた分の調整を行うので フレーム数で計測の誤差が少なくなります。 デメリット: ・画面の内容が間引きされる フレームスキップを行ったフレームだけ、 描画処理がなくなるので、画面に反映される内容が 本来の内容と比べて間引きされたものになります。 フレームスキップはあくまで処理落ちが発生した際の対応策なので 処理落ちの原因となる箇所の見直しの必要はあります。 また、メリットとデメリットがあるので、それを考慮したうえで 使用するかどうかを決めてください。
①.初期化
DirectXやDxLib、OpenGLなどのゲームを開始する上で必要な
初期化処理を実行します。
②.ゲームループ
ゲームループはゲームが終了するまで繰り返されます。
2-1.ゲーム処理
ゲーム処理はその名前の通り、プレイヤーや敵、UIやエフェクトなど
ゲームを動かすためのオブジェクトに対する処理を行います。
2-2.描画処理
描画処理は「ゲーム処理」の結果を画面に反映するための処理です。
③.終了
ゲームを終了したので、①で作成したライブラリなどの解放処理を行います。
●FPS(Frames Per Second)
FPSとは1秒間に何回フレーム処理(ゲーム処理と描画処理)を行うかを表した単位のことです。
例えば60FPSでは1秒間に60回フレーム処理(ゲーム処理と描画処理)を実行します。
・フレーム
フレームとはゲームループの繰り返し回数に使用する単位です。
1フレーム中に「ゲーム処理」「描画処理」を1回ずつ実行します。
・処理時間制御
FPSを実現するためには一定間隔で処理を実行できるように
処理時間を制御する必要があります。
例:
60FPS => 1フレームを約0.016秒(16ms)間隔で実行
30FPS => 1フレームを約0.032秒(32ms)間隔で実行
1フレームで行う処理がきっちりFPSの間隔にあわせて終わることはありません。
早く終わった場合は次のフレームの開始時間になるまで処理を停止させます。
もし時間がかかりすぎた場合、「処理落ち」と呼ばれる現象が発生します。
これを回避するために「フレームスキップ」や処理の内容を見直し、
速度向上を実現する必要があります。
・処理落ち
処理落ちとは1フレーム内でかかった処理時間がFPSの処理周期時間を
超えてしまった際に発生する現象です。
主な現象:
ゲーム画面の止まる
処理の遅延が発生するので描画の更新が遅れ、画面が一瞬止まります。
発生頻度が高いとコマ送りで動いているようになります。
時間の誤差
時間計測は処理的コストが高いとされているので、
ゲームではよくフレーム数で時間を計ります。
処理落ちが発生すると処理落ちの頻度の分タイマーとしての
精度が落ちることになります。
・フレームスキップ
フレームスキップとは処理落ちが発生した際の対応策です。
内容は時間をオーバーした分の調整として本来の時間に戻るまで
ゲーム処理だけを行い描画処理は実行を行わないというものです。
描画処理が停止するので画面の内容がいきなりスキップします。
メリット:
・時間の誤差が少なくなる
周期時間を越えた分の調整を行うので
フレーム数で計測の誤差が少なくなります。
デメリット:
・画面の内容が間引きされる
フレームスキップを行ったフレームだけ、
描画処理がなくなるので、画面に反映される内容が
本来の内容と比べて間引きされたものになります。
フレームスキップはあくまで処理落ちが発生した際の対応策なので
処理落ちの原因となる箇所の見直しの必要はあります。
また、メリットとデメリットがあるので、それを考慮したうえで
使用するかどうかを決めてください。
