ゲームループ
■ゲームループ
ゲームはゲーム内容を画面に表示するために一定間隔ごとに 「ゲーム処理」と「描画処理」を行っています。 この一定間隔の「ゲーム処理」と「描画処理」を繰り返すことを ゲームループと呼びます。①.初期化 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の処理周期時間を
		超えてしまった際に発生する現象です。
		主な現象:
			ゲーム画面の止まる
				処理の遅延が発生するので描画の更新が遅れ、画面が一瞬止まります。
				発生頻度が高いとコマ送りで動いているようになります。
			時間の誤差
				時間計測は処理的コストが高いとされているので、
				ゲームではよくフレーム数で時間を計ります。
				処理落ちが発生すると処理落ちの頻度の分タイマーとしての
				精度が落ちることになります。
	・フレームスキップ
		フレームスキップとは処理落ちが発生した際の対応策です。
		内容は時間をオーバーした分の調整として本来の時間に戻るまで
		ゲーム処理だけを行い描画処理は実行を行わないというものです。
		描画処理が停止するので画面の内容がいきなりスキップします。
		メリット:
			・時間の誤差が少なくなる
				周期時間を越えた分の調整を行うので
				フレーム数で計測の誤差が少なくなります。
		デメリット:
			・画面の内容が間引きされる
				フレームスキップを行ったフレームだけ、
				描画処理がなくなるので、画面に反映される内容が
				本来の内容と比べて間引きされたものになります。
		フレームスキップはあくまで処理落ちが発生した際の対応策なので
		処理落ちの原因となる箇所の見直しの必要はあります。
		また、メリットとデメリットがあるので、それを考慮したうえで
		使用するかどうかを決めてください。
