Ich denke, ich habe beschlossen, dass ich Event-Handler wirklich mag. Möglicherweise leide ich ein bisschen an einer Analyse-Lähmung, aber ich mache mir Sorgen, dass mein Design unhandlich wird oder dass ich auf eine andere unvorhergesehene Konsequenz für meine Designentscheidungen stoße.
Meine Spiel-Engine rendert derzeit auf Basis von Sprites mit einer Schwenk-Overhead-Kamera. Mein Design sieht ungefähr so aus:
SceneHandler
Enthält eine Liste von Klassen, die die SceneListener-Schnittstelle implementieren (derzeit nur Sprites). Ruft render () einmal pro Tick auf und sendet onCameraUpdate (); Nachrichten an SceneListener.
InputHandler
Fragt die Eingabe einmal pro Tick ab und sendet eine einfache "onKeyPressed" -Nachricht an InputListeners. Ich habe einen Camera InputListener, der eine SceneHandler-Instanz enthält und updateCamera () auslöst. Ereignisse basierend auf der Eingabe.
AgentHandler
Ruft einmal pro Häkchen Standardaktionen für Agenten (AI) auf und überprüft einen Stapel auf neu registrierte Ereignisse und sendet sie nach Bedarf an bestimmte Agenten.
Ich habe also grundlegende Sprite-Objekte, die sich in einer Szene bewegen und rudimentäres Lenkverhalten zum Reisen verwenden können. Ich bin zur Kollisionserkennung gekommen, und hier bin ich mir nicht sicher, in welche Richtung mein Design gehen soll. Ist es eine gute Praxis, viele kleine Event-Handler zu haben? Ich stelle mir vor, ich müsste eine Art CollisionHandler implementieren.
Wäre ich mit einem konsolidierten EntityHandler, der KI, Kollisionsaktualisierungen und andere Entitätsinteraktionen in einer Klasse verarbeitet, besser dran? Oder ist es in Ordnung, einfach viele verschiedene Subsysteme für die Ereignisbehandlung zu implementieren, die basierend auf der Art des Ereignisses Nachrichten aneinander weiterleiten? Soll ich einen EntityHandler schreiben, der einfach für die Koordination all dieser Sub-Event-Handler zuständig ist?
In einigen Fällen, wie z. B. meinem InputHandler und SceneHandler, stelle ich fest, dass dies sehr spezifische Ereignistypen sind. Ein großer Teil meines Spielcodes kümmert sich nicht um Eingaben, und ein großer Teil kümmert sich nicht um Aktualisierungen, die nur beim Rendern der Szene auftreten. Daher halte ich meine Isolation dieser Systeme für gerechtfertigt. Ich stelle diese Frage jedoch speziell für Ereignisse vom Typ Spielelogik.
quelle
In den meisten Situationen kann die Verwendung von Ereignissen über andere Optionen häufig die Geschwindigkeit und Dezentralisierung verbessern. Ich denke, wenn du viele Events nutzen kannst, solltest du es versuchen.
quelle