1

html5 ゲーム開発プロジェクトを開始することを考えました。
ゲーム プロジェクトをモデリングすることから始めました。私はこのようなものを思いつきました。

Game

   Array of Entities
   Timer
   score
   some methods for initializing
   master draw
   master update


Entity

   Update
   Draw

何が起こるかというと、マスター メソッド (更新または描画) が各エンティティで更新/描画メソッドを呼び出すことです。

モデルは十分にきれいに見えたので、コーディングを開始しましたが、異なるエンティティ間の通信方法がないことに気付きました。

あるエンティティの update メソッドは、他のエンティティの状態を考慮する必要があります。

エンティティをループして簡単に呼び出せるように、各更新関数のプロトタイプを同じ引数セットでコーディングしました。

誰かが問題を克服する方法を提案してください。モデルにどのような変更を加える必要がありますか?
また、ソフトウェア アーキテクチャのモデル化とその拡張をどのように改善しますか。コードのどの部分を抽象化しておくかをどのように決定しますか?

4

2 に答える 2

2

わかりました... それはかなり幅広い質問であり、おそらくここで決定的な答えを得ることはできません. しかし、一般的には、Model-View-[何か別のもの] の観点からゲームを考える必要があります。ここで [Something other] は"Controller"または"ViewModel"、またはその中間の何かになります。

Model-View パターンで参照されるモデル (上記の参照とは異なります) は、ゲーム ロジックを認識して維持しますが、その視覚的表現は認識しません。ゲーム ロジックには、スコア、レベル、プレイヤーなどが含まれます。ゲーム内の各ビュー (ビューはスコア ボックスまたはプレイヤー キャラクターである可能性があります) にはモデルへの参照があり、レンダリングに必要な情報をモデルから抽出します。これが、ビュー間で情報を共有する方法です – 集中型モデル (複雑なゲームではモデルにサブモデルがある場合がありますが、最初は単一のモデル クラスでシンプルに開始します) を使用します。

ビューで、本質的にモデルベースではないロジックの調整が必要であることがわかった場合は、コントローラーまたはビューモデル ロジックを導入します。

「ゲーム デザイン パターン」(「javascript」の有無にかかわらず) をグーグルで検索すると、この問題に関するあらゆる種類の興味深いチュートリアルが見つかるはずです。

** 編集: **

あなたの場合、おそらくGameをコントローラーと考えるべきです。初期化時に、スコアとタイマー ロジックを配置するModelをインスタンス化します (したがって、 Game内ではありません。次に、 Entitiesの配列をインスタンス化し、それぞれにModelのインスタンスを与えます。 update メソッドでは、Gameは次のようになります。適切なメソッドを呼び出してModelを更新してからupdate()、各Entityを呼び出します。これにより、 Modelから状態が読み取られ、それに応じて再描画されます。

Gameがエンティティを呼び出さずupdate()、代わりにModelへの変更が、各Entityによってサブスクライブされるイベントをトリガーする、これのバリエーションがあります。

于 2012-12-07T22:42:53.843 に答える