Ereignissysteme sind erstaunlich, sie machen extrem unhandlichen Code zahm und ermöglichen wirklich die dynamische Erstellung von Spielen durch einfache Kommunikation von Objekten und der Spielschleife. Ich habe Schwierigkeiten mit der Effizienz meiner aktuellen Implementierung. Derzeit hat meine leichte Optimierung der Aufteilung der Objektlisten in die Ereignisse, auf die sie reagieren, Wunder bewirkt, aber ich sollte noch mehr tun können.
Derzeit habe ich zwei Methoden:
Am einfachsten: Alle Objekte werden einem Vektor hinzugefügt, wenn ein Ereignis gesendet wird. Alle Objekte erhalten das Ereignis über die handle_event () -Methode
Komplexer: Ich habe eine Map mit einem String als Schlüssel und einem Int als Wert. Wenn ein Ereignistyp hinzugefügt wird, wird er dieser Zuordnung hinzugefügt, wobei der int einfach inkrementiert wird (es muss einen besseren Weg geben),
der Vektor der Vektoren von Objekten wird dann ein neuer Vektor zurückgeschoben, um diesen Ereignistyp zu behandeln.
Wenn ein Ereignis aufgerufen wird, ruft es einfach das entsprechende int in der eventTypes-Zuordnung zum Typ innerhalb des Vektors von Vektoren von Objekten auf und sendet dieses Ereignis an jedes Objekt, das diesen Ereignistyp behandelt.
Diese erste Methode ist (offensichtlich) für viele Objekte ziemlich langsam, für sehr wenige Objekte jedoch ziemlich schnell. Während die zweite Methode bei großen Objekten, die unterschiedliche Ereignistypen verarbeiten möchten, recht schnell ist, jedoch langsamer als die erste Methode pro Objekt bei Objekten, die denselben Ereignistyp verarbeiten.
Gibt es einen schnelleren Weg (zur Laufzeit)? Gibt es eine schnellere Möglichkeit, ein int vom Zeichenfolgentyp nachzuschlagen? (Anfangs hatte ich eine Aufzählung, aber es waren keine benutzerdefinierten Typen zulässig, die aufgrund der gewünschten Dynamik erforderlich sind.)