質問

私の小さなRPGプロジェクトのためのオブザーバーパターンの種類を使用して中央のイベントディスパッチシステムを作成しようとしています、そして私はイベントデータを表すのが最善の方法についてのアドバイスが必要です。

event_input_keypressedまたはevent_game_actWormovedなどの静的列挙型で定義されたさまざまなイベントタイプのリスナークラスを登録するEventManagerを登録します。イベントをキューに格納し、それらを対応するリスナーにディスパッチします。これにより、メソッドHandleEvent(イベントE)または何かがあります。

各イベントはイベント型のオブジェクトになり、イベントタイプなどのデータを保持します。

私の質問は、イベントデータの性質がイベントタイプ間でかなり異なるため、このデータはどのように表現されるべきですか?私が将来的に作成したいイベントの種類を正確に確信しているので、これはできるだけ柔軟になるようにしてください。たとえば、イベントは特定の条件が当てられている場合は他のイベントを起動する可能性があります(つまり、プレーヤーがアクションキーを押したときには、プレーヤーが特定の場所にある場合はドアが開き、キーが付いています)。 XMLまたはスクリプトは良い選択ですか?私が考えることができるもう一つの方法は、ActorEventまたはMenueventのようなすべての一般的なイベントのためのカスタムクラスを作成することですが、それは本当に非効率的で柔軟性がないようです。 また、文字などの一部のオブジェクトは、「W」キーが押されたときに非常に具体的なイベントを知る必要があるため、「H」のような他のキーが押されたときに通知する必要はありません。それは、特定の方法であるか、それともより良い方法であるイベントタイプを作成することが実行可能ですか?すなわち。 event_input_keypressed_w

ありがとう

役に立ちましたか?

解決

  1. Eventベースオブジェクトから拡張した、イベントの具体的な実装を作成します。まず、キュー内にあるオブジェクトを配布する方が簡単になります。
  2. あなたのイベントリスナーコードは、はるかに簡単で厳密に管理されます。マウスイベントがキーイベントに過ぎることになる可能性はありません。また、リスナーレベルでイベントオブジェクトをテストしてキャストする必要はありません。
  3. 私は、特定のイベントの特定の状態を通知したいだけである「フィルタリングされた」イベントリスナーを作成できなかった理由がわかりませんでした。実際には、それがきれいなアイデアだと思います。
  4. 私はおそらくいくつかの種類のプラガブル派遣メカニズムを考案するでしょう。つまり、新しいイベントタイプを追加するときは、キューを更新する必要はありません。単に新しいディスパッチャーを登録することができます。あなたが達成したいのかもしれないものに応じて、あなたのキューはイベントをディスパッチャーに渡します(ディスパッチャーのリストを取得するためのいくつかの手段を提供する)。ディスパッチャは、イベントの処理方法を知っているかどうかを判断します。その後、ディスパッチャはイベントを必要なリスナーにディスパッチします(そして、あなたが達成したいものに応じて)、イベントが発送されたかどうかに応じて結果を返します。

    MHO

他のヒント

  • あなたが言ったように、さまざまなイベントタイプの構造が異なりますが、イベントごとに具体的なクラスを作成することをお勧めします。各キーにクラスを作成する必要はありません。しかし、一般的にキーボードイベント
  • あなたは文字を特定のキーを通知するだけです。文字を通知し、そのオブジェクトを無関係なキーを無視するのは何がわからないが、これがクラス間で共通のパターンであれば、特別なキーセットに反応する可能性がある10個の異なるクラスがあります。コードを繰り返し、イベントとリスナー間でディスパッチャー層を実装するには。1種類のDISPACHERSは、キーのリストを受信し、そのイベントのリストを受信し、それに基づいてイベントをフィルタリングすることができます。別の種類のディスパッチャーは、複数のイベントが特定の順序で考慮されている場合にのみ、リスナーを乱すだけであるSEQDispatcherです。 私はPluggableの紛争者のアイデアが好きですMadProlammerは言った。また、ディスパッチャのパイプを作成したい場合があります!
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top