1

趣味でゲームを作っています。このゲームには、人間を追いかけるモンスターがいます (パックマンのようなもの)。パックマンが動けなくなると、人間を食べたり、何かを動かしたりできます。イベントを発生させる必要があります。これは、すべてのオブジェクトがお互いを認識しなければならないため、私のプログラムが非 oop になったためです。

イベントに応答するオブジェクト (ゲームと呼ばれる) のようなコントロールがあります。人間が動かした、モンスターが動かした、人間が食べた、モンスターが立ち往生し、最終的に何かが起こったことをビューに知らせて再描画します。ビューがアクターのキープレスに応答し、それらのイベントが何らかの方法で (イベントを使用して) 人間に到達する必要があることもポイントです。

  1. この問題を最もよく解決する方法を誰かが教えてくれますか? 同様の問題をインターネットで検索しましたが、見つかりませんでした。

  2. MVC: コントローラーはビューを認識していますか? もしそうなら: プログラム全体はコントローラから始まりますか?それともビューから始まりますか? (何が誰を作るか)

4

2 に答える 2

1

基本的に、イベント処理メカニズムはプロデューサーとコンシューマーのパターンにすぎません。いくつかのイベント (アクション) を生成していて、アクションについて通知する必要があるリスナーのセットがあると想像してください。

Java 組み込みイベント処理を使用するかどうかは、既に記述したコードの量によって異なります。Java イベント処理を使用するようにコードをリファクタリングするのに多くの労力が必要であり、イベントのセットが限られている場合は、独自のメッセージ パッシング システムを作成できます。ただし、明らかに、Java イベント処理メカニズムを使用することをお勧めします。そのイベントに登録されているすべてのリスナーに通知するためです。すべてのリスナーに通知することを心配する必要はありません。後で問題が発生した場合のデバッグに役立ちます。違う。それがあなたの最初の質問に答えてくれることを願っています

つまり、HumanMovedEvent、MonsterMovedEvent などの独自のイベントを作成できます。

2 番目の質問になりますが、MVC ではそうです。コントローラーは、特定のアクションに対してトリガーする必要があるすべてのビューを認識しています。コントローラーは、特定のアクションに対して特定のビューを選択できます。たとえば、アクション A を実行すると、ビュー V を呼び出すことができます。

はい、プログラムはUIからコントローラーにリクエストを送信することから始まります。次に、コントローラーは、その特定のアクションのためにレンダリングする必要があるビューを選択します。

私はそれを明確にしたことを願っています:)

于 2011-12-21T20:40:16.657 に答える
0

MVC では、コントローラーはモデル オブジェクトとビューの両方を認識します。モデル オブジェクトは、誰がそれを制御しているかを知りません。同様に、ビューもそれを知りません。モデルとビューは通常、コールバックを介してコントローラーと通信します。モデルは、さまざまなコールバック メソッドのインターフェイスを定義し、そのインターフェイスへのポインターを保持する「デリゲート」インスタンス変数を持ちます。コントローラーは、自身をモデルのデリゲートとして設定します。ビューについても同様です。コールバックの代わりに、提案どおりにイベントを使用することもできます。これにより、デカップリングのレイヤーが追加されます。

  • モデルは、コントローラーだけでなく、イベントへの複数のリスナーを持つことができます
  • コントローラーがイベントを使用してモデルと通信する場合、コントローラーはモデルについてまったく知る必要はなく、イベントについてのみ知る必要があります。

通常、プログラム内のオブジェクトごとに、モデル、ビュー、コントローラーの組み合わせが 1 つあります (1 つのモンスター モデル、モンスター ビュー、およびモンスター コントローラー)。ただし、複数のモデル オブジェクトやビューを管理する 1 つのコントローラーを使用することもできます。どのアプローチが最も実用的かは、使用している UI フレームワークによって少し異なります。

2 番目の質問は、使用している UI フレームワークにも依存します。通常、コントローラーはビューをインスタンス化しますが、一部のフレームワークでは別の方法でインスタンス化します。

あなたが言及したキーボードキーの場合:通常、ビューは「ctrl-K」が押されたキーをコントローラーに通知し、コントローラーはそれをモデルオブジェクトの「1スペース上に移動」のコマンドに変換します。

于 2011-12-21T21:31:42.420 に答える