伝統的なゲームデザインは、私はそれを知っているように、使用する多型と仮想関数を更新ゲームオブジェクトの状態に。言い換えると、ゲーム内のすべてのオブジェクトで、同じ一連の仮想関数が定期的(例:フレームごと)に呼び出されます。
最近、もう1つ、ゲームオブジェクトの状態を更新するためのイベント駆動型メッセージングシステムがあることを発見しました。ここでは、オブジェクトは通常フレームごとに更新されません。代わりに、非常に効率的なイベントメッセージングシステムが構築され、ゲームオブジェクトは有効なイベントメッセージを受信した後にのみ更新されます。
イベント駆動型ゲームアーキテクチャについては、Mike McShaffryによる「Game Coding Complete」で詳しく説明されています。
以下の質問について、親切にお願いできますか?
- 両方のアプローチの長所と短所は何ですか?
- どちらが他より優れているのですか?
- イベント駆動型ゲームデザインは、すべての分野で普遍的で優れていますか?したがって、モバイルプラットフォームでも使用することをお勧めしますか?
- どちらがより効率的で、どちらが開発が難しいですか?
明確にするために、私の質問はゲームデザインから完全に多態性を取り除くことについてではありません。私は単に、イベント駆動型メッセージングと仮想関数への通常の(フレームごとの)呼び出しを使用してゲームの状態を更新することの違いとメリットを理解したいと思っています。
例: この質問はここで少し論争を引き起こしたので、例を挙げましょう。MVCによると、ゲームエンジンは3つの主要な部分に分かれています。
- アプリケーション層(ハードウェアおよびOS通信)
- ゲームロジック
- ゲームビュー
レーシングゲームでは、ゲームビューは画面をできるだけ速く、少なくとも30fpsでレンダリングする責任があります。ゲームビューもプレイヤーの入力をリッスンします。今これが起こります:
- プレーヤーが燃料ペダルを80%まで押した
- GameViewは「Car 2 Fuel Pedal Pressed to 80%」というメッセージを作成し、それをGame Logicに送信します。
- Game Logicはメッセージを取得し、評価し、新しい車の位置と動作を計算し、GameView用に次のメッセージを作成します: "Draw Car 2 Fuel Pedal Pressed 80%"、 "Car 2 Sound Acceleration"、 "Car 2 Coordinates X、Y" .. 。
- GameViewはメッセージを受信し、それに応じて処理します
update
それらを呼び出すだけです)。2つ目は、さまざまな理由でメッセージングで実行できます。