ゲームループ

■ゲームループ

ゲームはゲーム内容を画面に表示するために一定間隔ごとに
「ゲーム処理」と「描画処理」を行っています。
この一定間隔の「ゲーム処理」と「描画処理」を繰り返すことを
ゲームループと呼びます。

		gmpg_0107

	①.初期化
		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の処理周期時間を
		超えてしまった際に発生する現象です。

		主な現象:
			ゲーム画面の止まる
				処理の遅延が発生するので描画の更新が遅れ、画面が一瞬止まります。
				発生頻度が高いとコマ送りで動いているようになります。

			時間の誤差
				時間計測は処理的コストが高いとされているので、
				ゲームではよくフレーム数で時間を計ります。
				処理落ちが発生すると処理落ちの頻度の分タイマーとしての
				精度が落ちることになります。

	・フレームスキップ
		フレームスキップとは処理落ちが発生した際の対応策です。
		内容は時間をオーバーした分の調整として本来の時間に戻るまで
		ゲーム処理だけを行い描画処理は実行を行わないというものです。
		描画処理が停止するので画面の内容がいきなりスキップします。

		メリット:
			・時間の誤差が少なくなる
				周期時間を越えた分の調整を行うので
				フレーム数で計測の誤差が少なくなります。

		デメリット:
			・画面の内容が間引きされる
				フレームスキップを行ったフレームだけ、
				描画処理がなくなるので、画面に反映される内容が
				本来の内容と比べて間引きされたものになります。

		フレームスキップはあくまで処理落ちが発生した際の対応策なので
		処理落ちの原因となる箇所の見直しの必要はあります。
		また、メリットとデメリットがあるので、それを考慮したうえで
		使用するかどうかを決めてください。