ゲームでのMVCのような区分化?[閉まっている]


19

私はゲームのデザインを考えていました(ボードゲームをコンピューターに翻訳し、具体的には、この場合に関連していると思います)。

簡単なテキストインターフェイスを使用して、何かをすばやくプロトタイプ化してから、後でそれをきれいにすることができます。また、ゲームを他のメディアに簡単に移植できるようになります。

この種の区分化はゲームで一般的ですか?さらに物事を分解しようとする必要がありますか?行方不明の合併症はありますか?

回答:


7

ゲームロジック(モデル)はビジュアル(ビュー)とはまったく独立して存在するため、ボードゲームはMVCを使用して作成できるゲームの良い例です。ただし、Gears of Warのようなアクションゲームを検討する場合、3Dモデルのジオメトリはゲームロジックに固有であるため、ビューを交換可能なものとして分離することは無意味になります。Unity3Dは、よりゲーム固有のコード編成方法の優れた例です。コンポーネントを使用して機能を追加するベースエンティティクラスがあり、1つのコンポーネントがエンティティの描画を処理し、1つがゲームロジックを処理する場合があります。このテーマに関する有名なブログ投稿をチェックしてください。

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

http://gameprogrammingpatterns.com/component.html


FPSesが見るためにMVCはうまく動作することができますgamasutra.com/features/20050414/rouwe_01.shtmlを少なくとも一つの参考のために。
ストーンメタル

3
「... 3Dモデルのジオメトリはゲームロジックに固有です...」したがって、ジオメトリは主にモデルデータになり、コントローラによって操作されます(この場合、物理に影響を与えるため、他のすべての物理に存在します)パラメータ)ゲームロジック用。この場合のように、たまたまビューにも使用されている場合、真のシミュレーションはモデルに影響を与えるコントローラーであるため、それはセカンダリと見なされます。ビューは無関係です。(構成データがモデル内に存在する必要があるかどうかについてのいくつかの混乱、あなた次第ですが、原則は同じままです)。これは純粋主義的なアプローチです。
エンジニア

5

私の考え:

  • モデルは、ほとんどのデータ嘘とすべてのロジックが行われる場所です。
    入力イベントのキューを読み取り、それに応じてゲームの状態を変更します。
    その後、物理状態やゲームの状態を更新する他のコアコンポーネントなどを処理します。
    ループ。それで全部です。
    目標は、モデルを独立させることです。ビューやコントローラーに依存しないため、モデルのみを実行するプログラムを作成できるはずです。
  • ビューは単に、モデルのゲームの状態を読み込み、データの表現に特化し、独自のコンポーネントを更新し、画面上のものを表示します。
    モデルに何も書き込まず、読み取り専用プロセスです。ただし、イベントハンドラーの登録を除きます(「Hey Mister Model」のように、これら2つのオブジェクト間の衝突を検出したら、サウンドを再生するイベントハンドラーを呼び出してください! ")。
  • コントローラは、入力イベントをキャッチし、モデルの入力キューに渡します。ビューを読み取ります(このボタンのクリックはUIボタンで発生しましたか?)。

これにより、事前に記録された入力イベントを含むファイルを読み取る偽のコントローラーをプラグインできます。
また、ファイルに記録するだけの簡単なビューを作成します。
テストとデバッグに非常に便利です。

一定の速度(固定タイムステップ)でモデルを更新し、ビューとコントローラーを可能な限り高速にすることを忘れないでください(ただし、変数は大きすぎません)。


0

そのような区分化は、エンジンとゲームコードの分割であり、非常に一般的です。途中で抽象化の余地がたくさんあります。

エンジンとゲーム固有のグラフィックデータは、ビュー、ゲームコードはモデル、コントローラーは、ゲームコードのどのエンティティにどのテクスチャを適用するかをエンジンに伝えるための接着剤になります。


2
これはまったく真実ではありません。MVCは、ユーザーインターフェイス(ビューとコントローラー)からの状態(モデル)の分離を定義します。「エンジン」は、ゲームを構築できる汎用フレームワークであり、モデル、ビュー、コントローラーの基本要素を含めることができます。
マイクワイアット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.