「ゲームループ」の版間の差分
(→概要) |
(→概要) |
||
7行目: | 7行目: | ||
出力は処理の変化に応じて画面描画や音声再生などを行う部分である。絵は派手になったがやっていることは[[ファミコン]]時代がから変わっていない。 | 出力は処理の変化に応じて画面描画や音声再生などを行う部分である。絵は派手になったがやっていることは[[ファミコン]]時代がから変わっていない。 | ||
要するにゲームループの基本は[[ファミコン]]時代から今の今まで変化していない。 | 要するにゲームループの基本は[[ファミコン]]時代から今の今まで変化していない。 | ||
+ | 速すぎず、遅すぎずが重要となる。 | ||
+ | |||
+ | ゲームループの単位は1秒間に何ループするかを表す「[[FPS (Frame Per Second)]]」が使われる。 | ||
+ | たとえば1秒間に60回のループであれば「60fps」などと表記される。 | ||
しかし、この単純そうなゲームループであるが、最近のゲームでは「処理」に時間がかかった場合、「前回のループ」に時間がかかった場合、ネットワークが遅延した場合などでも時間軸が狂わないよう、「出力」をスキップする「フレームスキップ」という機構が組み込まれることが多い。昔のゲームといえば重くなれば軒並みスローモーションになって画面がチラチラしていたが、最近はフレームスキップが主流である。 | しかし、この単純そうなゲームループであるが、最近のゲームでは「処理」に時間がかかった場合、「前回のループ」に時間がかかった場合、ネットワークが遅延した場合などでも時間軸が狂わないよう、「出力」をスキップする「フレームスキップ」という機構が組み込まれることが多い。昔のゲームといえば重くなれば軒並みスローモーションになって画面がチラチラしていたが、最近はフレームスキップが主流である。 |
2017年3月24日 (金) 07:58時点における版
ゲームループとは、主にゲームで使われる永久ループのようなメインルーチンのことである。
概要
基本的にゲームでは「入力」「処理」「出力」を止まること無く延々と繰り返す。 入力はキーボードやマウス、ゲームパッドなどからの操作を受け付ける部分である。ファミコン時代がから変わっていない。 処理は入力やAI、時間経過に伴う変化を処理する部分である。これもファミコン時代から変わっていない 出力は処理の変化に応じて画面描画や音声再生などを行う部分である。絵は派手になったがやっていることはファミコン時代がから変わっていない。 要するにゲームループの基本はファミコン時代から今の今まで変化していない。 速すぎず、遅すぎずが重要となる。
ゲームループの単位は1秒間に何ループするかを表す「FPS (Frame Per Second)」が使われる。 たとえば1秒間に60回のループであれば「60fps」などと表記される。
しかし、この単純そうなゲームループであるが、最近のゲームでは「処理」に時間がかかった場合、「前回のループ」に時間がかかった場合、ネットワークが遅延した場合などでも時間軸が狂わないよう、「出力」をスキップする「フレームスキップ」という機構が組み込まれることが多い。昔のゲームといえば重くなれば軒並みスローモーションになって画面がチラチラしていたが、最近はフレームスキップが主流である。
このフレームスキップのアルゴリズムは近代ゲームループ実装の核ともいえるくらい地味に凄いらしく、とくに複数人が時間軸を共有するネットワークゲームではゲームが破綻しかねない要素であるため、大手メーカーなんかでは社外秘レベルの非常に複雑なアルゴリズムを採用しているとされる。詳しくは知らん。
まあ、最近のゲームエンジンはほぼ全自動でやってくれるんだけどね。 稀にゲームエンジンにサードパーティ製の物理演算エンジンなんかを組み込むと全自動でやってくれない(物理演算エンジン側が破綻する)場合もあるので注意しよう。
関連項目
- MonoGame/画面解像度を設定する
- MonoGame/解像度を取得する
- PlayStation Suite SDK/プログラムの基本構造
- SystemEvents.CheckEvents () メソッド (Sce.Pss.Core.Enviroment)