ゲームループを編成するアイデアがあります。性能に疑問があります。物事を行うためのより良い方法があるかもしれません。
ゲーム コンポーネントの配列があるとします。それらはすべて、ゲームループの反復ごとに何らかの処理を行うために呼び出されます。例えば:
GameData data; // shared
app.registerComponent("AI", ComponentAI(data) );
app.registerComponent("Logic", ComponentGameLogic(data) );
app.registerComponent("2d", Component2d(data) );
app.registerComponent("Menu", ComponentMenu(data) )->setActive(false);
//...
while (ok)
{
//...
app.runAllComponents();
//...
}
利点:
- 優れたコンポーネントベースのアプリケーション、依存関係なし、優れたモジュール性
- コンポーネントを動的にアクティブ化/非アクティブ化、登録/登録解除できます
- 一部のコンポーネントは透過的に削除または置換でき、システムは何も起こらなかったため引き続き動作します (2 次元から 3 次元への変更) (チームワーク: すべてのプログラマーが独自のコンポーネントを作成し、コードをコンパイルするために他のコンポーネントを必要としません)
疑問:
- Component::run() への仮想呼び出しを含むゲーム ループの内部ループ
- Component::run() が bool 値を返し、この値を確認したいと思います。false が返された場合、コンポーネントを無効にする必要があります。したがって、内側のループはより高価になります。
さて、この解決策はどれほど良いでしょうか? 実際のプロジェクトで使用したことがありますか?