Ereignisse, Posting vs Queuing


7

Ich implementiere ein Messaging-System und frage mich, wie ich mit Ereignissen umgehen soll. Soll ich sie posten und an die entsprechenden Hörer senden, sobald ich sie erhalte, oder sollte ich sie in die Warteschlange stellen und nur versenden, wenn ich dazu aufgefordert werde (höchstwahrscheinlich von der Hauptspielschleife)?


Bearbeiten: Weitere Infos

Mein Spiel ist ein 2D-Plattformer, daher wird die Leistung nicht sehr schwer zu erreichen sein. In Anbetracht dessen, was Roy T. gesagt hat , könnte ich das Ereignis genauso gut senden, sobald es veröffentlicht wird. Es scheint nicht nötig zu sein, es in die Warteschlange zu stellen (es sei denn, ich vermisse natürlich etwas).

Antworten:


3

Wir brauchen wirklich mehr Informationen, aber wenn Sie ein wirklich ausgefallenes System schreiben, wäre ein Dispatcher nett, da Sie dann Ereignisse priorisieren können (Netzwerkereignisse könnten eine höhere Priorität haben als beispielsweise Chat-Ereignisse).

Ein echter Dispatcher wird jedoch wahrscheinlich übertrieben sein und die Dinge aufgrund der Sortierung nach Priorität sogar verlangsamen. Wenn Sie nicht sorgfältig genug darüber nachdenken, können Sie Ereignisse mit niedriger Priorität aushungern.

Wie auch immer, mit mehr Informationen können wir besser erraten, was besser wäre.

Bearbeiten:

Als Antwort auf das Hinzufügen von Informationen: Nein, es scheint nicht, dass Sie einen geeigneten Dispatcher benötigen :)


Ich habe meiner Frage einige weitere Details hinzugefügt.
Paul Manta

5

Möglicherweise möchten Sie beide verfügbar haben und die richtige für den aktuellen Listener verwenden. Beispielsweise möchte Ihr Entitätssystem möglicherweise sofort wissen, wie ein Feind entfernt werden kann, damit es nicht aktualisiert und verschoben wird. Ihr Inventarsystem kann jedoch möglicherweise warten, da der Spieler den Gegenstand erst im nächsten verwenden kann Rahmen sowieso.

Beim Binden an das Ereignis sollte der Listener also angeben, wann er aktualisiert werden soll:

  • sofort
  • am Ende des Rahmens
  • am Anfang des nächsten Frames
  • kurz vor dem nächsten Update des Hörers
  • usw

In einem größeren System wäre so etwas sehr schön, aber ich denke nicht, dass der Umfang meines aktuellen Projekts die Zeit rechtfertigt, die ich für die Implementierung dieses Projekts aufwenden müsste.
Paul Manta

4
Sicher wissen Sie am besten, was Sie brauchen. Aber Sie haben gefragt, welcher Ansatz am besten ist, und die Antwort lautet: Für eine Mindestschwelle der Komplexität finden Sie Situationen, in denen Sie beides wollen.
Tenpn

2

C # -Ereignis-Listener werden sofort nach Eintreten des Ereignisses in Abonnementreihenfolge aufgerufen. Ich würde dasselbe tun. Ich benutze diese in meinem 2D-Spiel und es funktioniert bisher großartig.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.