イベント、投稿とキューイング


7

メッセージングシステムを実装していて、イベントをどのように処理する必要があるのか​​疑問に思っています。それらをポストして、受信したらすぐに適切なリスナーに送信する必要がありますか、それともキューに入れて、(おそらくメインのゲームループによって)プロンプトが表示されたときにのみディスパッチする必要がありますか?


編集: 詳細

私のゲームは2Dプラットフォーマーなので、パフォーマンスを達成するのはそれほど難しくありません。Roy T.の発言を考慮すると、イベントが投稿されたらすぐに送信するのもよいでしょう。それをキューに入れる必要はないようです(もちろん、何か欠落している場合を除きます)。

回答:


3

私たちは本当にもっと多くの情報を必要としていますが、本当に派手なシステムを書いているならディスパッチャがいいので、イベントに優先順位を付けることができます(たとえば、ネットワークイベントはチャットイベントよりも高い優先順位を持つことができます)。

ただし、実際のディスパッチャーはおそらく過剰になり、優先順位でのソートのために処理が遅くなる可能性があり、十分に注意深く検討しなければ、優先順位の低いイベントが不足する可能性があります。

とにかく、より多くの情報があれば、私たちはより良いものをよりよく推測することができます。

編集:

情報を追加することへの応答として:いいえ、適切なディスパッチャーが必要なようではありません:)


質問にさらに詳細を追加しました。
ポールマンタ2011

5

両方を使用可能にして、現在のリスナーに適切なものを使用することもできます。たとえば、エンティティシステムは敵を削除するためにすぐに知りたいので、更新および移動されませんが、インベントリシステムは、プレーヤーが次のアイテムまでアイテムを使用できないため、待機できる場合があります。とにかくフレーム。

したがって、イベントへのバインド時に、リスナーはいつ更新するかを指定する必要があります。

  • すぐに
  • フレームの終わりに
  • 次のフレームの開始時
  • リスナーの次の更新の直前

大規模なシステムでは、このようなものは非常に優れていますが、現在のプロジェクトの規模が、これを実装するために費やす必要がある時間を正当化するとは思いません。
ポールマンタ2011

4
確かにあなたはあなたが必要なものを最もよく知っています。しかし、あなたはどちらのアプローチが最適であるかを尋ねました。そして答えは、複雑さのいくつかの最小しきい値では、両方が必要な状況を見つけるでしょう。
tenpn

2

C#イベントリスナーは、イベントが発生するとすぐにサブスクリプション順に呼び出されます。私も同じようにします。私は2Dゲームでこれらを使用していますが、今のところうまくいきます。

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