Nun, ich weiß, dass dieser Beitrag ziemlich alt ist, aber ich konnte nicht widerstehen.
Ich habe vor kurzem eine Game-Engine gebaut. Es verwendet 3D-Party-Bibliotheken für Rendering und Physik, aber ich habe den Kernteil geschrieben, der die Entitäten und die Spiellogik definiert und verarbeitet.
Der Motor folgt sicherlich einem traditionellen Ansatz. Es gibt eine Hauptaktualisierungsschleife, die die Aktualisierungsfunktion für alle Entitäten aufruft. Kollisionen werden direkt per Rückruf an die Entitäten gemeldet. Die Kommunikation zwischen Entitäten erfolgt über intelligente Zeiger, die zwischen Entitäten ausgetauscht werden.
Es gibt ein primitives Nachrichtensystem, das nur eine kleine Gruppe von Entitäten zu Engine-Nachrichten verarbeitet. Es ist vorzuziehen, diese Nachrichten am Ende einer Spielinteraktion zu verarbeiten (Beispiel: Erstellung oder Zerstörung einer Entität), da sie mit der Aktualisierungsliste in Konflikt geraten können. Am Ende jeder Spielrunde wird eine kleine Liste von Nachrichten verbraucht.
Trotz des primitiven Nachrichtensystems würde ich sagen, dass das System größtenteils auf "Aktualisierungsschleifen" basiert.
Gut. Nachdem ich dieses System benutzt habe, denke ich, dass es sehr einfach, schnell und gut organisiert ist. Die Spiellogik ist sichtbar und in sich geschlossen, nicht dynamisch wie eine Nachricht. Ich würde es wirklich nicht ereignisgesteuert machen, da meiner Meinung nach Ereignissysteme die Spielelogik unnötig komplizieren und den Spielcode sehr schwer zu verstehen und zu debuggen machen.
Aber ich denke auch, dass ein reines "Update Loop-basiertes" System wie das meine auch einige Probleme hat.
In einigen Momenten befindet sich beispielsweise eine Entität möglicherweise in einem "Nichtstun" -Zustand, wartet darauf, dass sich der Spieler nähert, oder etwas anderes. In den meisten Fällen verbrennt die Entität die Prozessorzeit für nichts und es ist besser, die Entität auszuschalten und sie einzuschalten, wenn ein bestimmtes Ereignis eintritt.
Also werde ich in meiner nächsten Spiel-Engine einen anderen Ansatz verfolgen. Die Entitäten registrieren sich für Motoroperationen wie Aktualisieren, Zeichnen, Kollisionserkennung und so weiter. Jedes dieser Ereignisse verfügt über separate Listen von Entitätsschnittstellen für die tatsächlichen Entitäten.