MVCまたはコンポーネント、あるいはその両方?


9

私は経験豊富な開発者ですが、最近ゲームプログラミングに取り組みたいと思っていますが、ご存知のように、ゲーム開発は他のほとんどのプログラミング形式とはまったく異なります(おそらくオペレーティングシステム開発によってのみ得られます)。

そうは言っても、Mike McShaffryによるGame Coding Complete(ISBN 978-1-58450-680-5)を読んでいます。

もともとは、通常のコンポーネント(SpacialComponent、VisualComponent、EntityLogicComponentなど)を組み合わせたコンポーネントモデルで開発しようとしましたが、McShaffry氏は非常に魅力的に見えるMVCモデルを使用することをお勧めしますが、どうすればよいかわかりません可能な限りコンポーネントモデルで動作させることができますが、コンポーネントがないと、MVCモデルは邪悪なモノリシックな継承モンスターのように見え、あまり柔軟ではないため、あまり興味がありません。

私はこの時点からどこに行くべきかについて本当に混乱しています。

より経験豊富なゲームコーディングブードゥーエキスパートは、考えや推奨事項を持っていますか?

どうもありがとうございます!


StackOverflowに関するこの質問では、コンポーネントベースの設計について説明しています。
マッケ

回答:


6

役立つ質問:

MVC(Model-View-Controller)ゲームエンジンアーキテクチャ-はい、またはいいえ

MVCとTDDがゲームアーキテクチャで採用されないのはなぜですか?

ゲームのMVCのような区分化?

私にとっては、RenderComponent基本クラスと、それから継承するいくつか(GameSprite、UISprite、または3D StaticModel、DynamicModel、BillboardModelなどを実行している場合)があり、オブジェクトがそれ自体をレンダリングしたい場合、オブジェクトはそのサブミットを送信しますレンダリングシステムへのRenderComponentメンバー。レンダリングシステムがRenderComponentを送信したオブジェクトの種類を認識する必要はありません。それはレンダリングするものがあることを知っているだけで、それを行うほうがいい、そうでなければ!

継承ではなく、構成を中心にして、基本的にしてください。ロジック、データ、表現の分離は、コンポーネントシステムと互換性がありません。


6

最初のゲームではコンポーネントを無視することをお勧めします。コンポーネントは他の領域にいくつかのタイプの複雑さを追加することによっていくつかのタイプの複雑さを解決します。まだゲームを作成していない場合、このトレードオフに価値があるかどうかわかりません。

ただし、ほとんどの場合、プログラミングパラダイムに夢中になることなく、ゲームをコーディングするだけです。正しい方法も間違った方法もありません。そうでなければ、この種の質問をする必要はありません。途中で解決してください。


1
+1は、「他の領域にさらに複雑さを追加することで、いくつかのタイプの複雑さを解決します」。そこにある「デザインパターン」のほぼ99%、あるいは一般的なテクノロジーにさえ当てはまります。
kizzx2

2

厳密なMVCパターンは使用しませんが、レンダリングをシミュレーションから分離して、別のスレッドに貼り付けます。

コンポーネントは実際には非常に便利だと思いますが、多くの場合、人々はそれらを無視して、コードを「メイン」コンポーネントに直接書き込むことがよくあります。ゲームはハックで一杯であることを覚えておく必要があります。なぜなら、コードは再利用されないという想定で締め切り日に書かれることが多いからです。

これらのアプローチに互換性がないと考える理由について少し混乱しています。あなたはどのゲームコードを見ましたか?

個人的には、ゲームには事前の設計が必要だと思います。「ちょうどそれをコード化する考え方」のために悪夢であったいくつかのコードベースを見てきました。

とはいえ、ゲームに飛び込んでコーディングするだけでよいと思います。あなたは最初のゲームを書くのに多くの間違いをするでしょう、このような種類の問題はそれほど重要ではありません。必要なものをよく理解したら、戻ってアーキテクチャーを調べ、発生した問題をどのように解決するかを確認します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.