6

私は MVC のバックグラウンド (Flex と Rails) から来ており、コードの分離、再利用性、カプセル化などのアイデアが大好きです。これにより、物事をすばやく構築し、他のプロジェクトでコンポーネントを再利用することが容易になります。ただし、複雑で状態駆動型の非同期のアニメーション化されたアプリケーションを構築しようとする場合、MVC の原則に固執することは非常に困難でした。

アプリケーション内の多くのネストされたビュー間でアニメーション化されたトランジションを作成しようとしていますが、自分自身を誤解させているかどうかを考えさせられました... MVC の原則を人工知能 (ビヘイビア ツリー、階層ステート マシン) の原則に適用できますか? 、ネストされた状態)、ゲームのような? これらの 2 つの分野はうまく連携していますか?

HTML CMS システムなどのように、物事が静的である場合、ビュー/グラフィックスがそれ以外のものを無視するのは非常に簡単です。しかし、複雑な状態駆動型の遷移を追加し始めると、すべてが他のすべてのことを知る必要があるように思われ、MVC がほとんど邪魔になります。どう思いますか?

アップデート:

例。今、私はFlexでWebサイトに取り組んでいます。アプリケーション内のネストされたすべての要素を適切にアニメーション化するには、それらを AI エージェントと見なす必要があるという結論に達しました。したがって、各「ビュー」には独自のビヘイビア ツリーがあります。つまり、コンテキストに基づいてアクション(表示および非表示) を実行します。(選択したデータは何かなど)。そのためには、ViewController タイプのものが必要です。私はそれをプレゼンターと呼んでいます。ビュー (MXML でレイアウトされたグラフィックス)、プレゼンター (アプリケーションの状態とネストされた状態に基づいてビューが実行できるアニメーションとアクションを定義する)、およびビューにデータを表示するためのプレゼンテーション モデル (発表者を通して)。また、値オブジェクト用のモデルと、URL やデータベース呼び出しなどを処理するためのコントローラーもあります...すべての通常の静的/html のような MVC のもの。

しばらくの間、私はこれらの「エージェント」をどのように構成して、周囲のコンテキスト (何が選択されているかなど) に応答できるようにするかを考えていました。他のすべてを認識する必要があるように思えました。そして、ゲームのパス/ナビゲーション テーブル/リストについて読み、すぐに、すべてのエージェントが実行できるすべての事前計算されたアクションの中央に格納されたテーブルがあると思いました。そのため、彼らが実際にコードをどのように構成しているのか疑問に思いました。

3D ビデオ ゲームのすべては大きな秘密であり、ビヘイビア ツリーの定義など、グラフィカルな UI/エディタで行われていることがわかります。そのため、エージェントが環境にどのように応答するか、またコードをモジュール化してカプセル化する方法を構造化するために、ある種の MVC を使用しているのかどうか疑問に思っています。

4

3 に答える 3

2

「MVC の原則を、ゲームなどの人工知能 (ビヘイビア ツリー、階層ステート マシン、入れ子状態) の原則に適用できますか?」

もちろん。AI の 99.9% は純粋にモデル内にあります。コントローラーはそれに入力を送信し、ビューは画面上でユーザーに表示する方法です。

ここで、AI に何かを制御させたい場合は、概念をネストすることになる可能性があり、ゲームの「モデル」には、エンティティのモデル、コマンドを送信する AI であるエンティティのコントローラ、およびコントローラーが操作できるエンティティの認識を表すエンティティのビュー。しかし、それは「うまくプレイできる」かどうかとは別の問題です。MVCは、プレゼンテーションと入力をロジックと状態から分離することであり、その側面はロジックと状態がどのように見えるかを気にしません。

于 2010-01-21T11:42:05.743 に答える
0

オブザーバー/イベントアグリゲーターパターンをさらに活用する必要があるようです。複数のコンポーネントが過度の結合を導入せずに任意のアプリケーションイベントに反応する必要がある場合は、イベントアグリゲーターを使用すると役立ちます。例:アイテムが選択されると、アプリケーションイベントが公開され、関連するコントローラーがビューにアニメーションを実行するように指示します。さまざまなコンポーネントは他のコンポーネントを認識せず、一般的なイベントをリッスンするだけです。

また、ビューに処理を実行させるコード(モデル/コントローラーの状態に応じてアニメーションを起動)-これはビュー自体の一部であるため、コントローラーとビューコントローラーを使用してアーキテクチャを奇妙にする必要はありません。UI固有のコードの場合、それはビューの一部です。私はFlexに精通していませんが、WPF / Silverlightでは、そのようなものがコードビハインドに入ります(ただし、ほとんどの場合、Visual State Managerは状態アニメーションを処理するのに十分であるため、すべてをXAMLで保持できます) 。

于 2010-03-09T19:34:18.017 に答える
0

これを覚えておいてください:反応する必要があるものは、単に彼らが反応する必要があるものを知っている必要があります。したがって、彼らがすべてについて知る必要がある場合、彼らはすべてについて知る必要があります。そうでなければ、-どのように-あなたは彼らに気づかせますか?ファーストパーソンシューティングゲームなどの3Dビデオゲームでは、敵は音と視覚に反応します(たとえば、足音/銃声とあなた/死体)。私は抽象的な基礎と決定木の一部を示したことに注意してください。

特定のケースでは、すべてを複数のエージェント間で分離するのは間違っている可能性があり、注文を別々のプロセスに委任できる1つのメインエージェントに任せる方が簡単です(/バブルを開始):各ビューは、次のように指示できるプロセスである可能性がありますメインエージェントが受信したデータに応じて、メインエージェントによる任意の(多数の)ビューに切り替えます。

それがお役に立てば幸いです..一粒の塩ですべてを取ります:)

于 2010-01-19T13:59:17.033 に答える