Nachdem ich zwei Fragen zu Entitätssystemen ( 1 , 2 ) gestellt und einige Artikel darüber gelesen habe, denke ich, dass ich sie viel besser verstehe als zuvor. Ich habe immer noch einige Unsicherheiten, hauptsächlich im Hinblick auf den Bau eines Partikelemitters, eines Eingabesystems und einer Kamera. Ich habe natürlich immer noch einige Probleme beim Verstehen von Entitätssystemen und sie können auf eine ganze Reihe anderer Objekte angewendet werden, aber ich habe diese drei ausgewählt, weil sie sehr unterschiedliche Konzepte sind, einen ziemlich breiten Bereich abdecken und mir helfen, Entitätssysteme und deren Funktionsweise zu verstehen Behandle Probleme wie diese selbst, wenn sie auf dich zukommen.
Ich baue eine Engine in JavaScript und habe die meisten Kernfunktionen implementiert, darunter Eingabehandling, flexibles Animationssystem, Partikelemitter, mathematische Klassen und Funktionen, Szenenhandling, eine Kamera und ein Rendering sowie eine ganze Reihe von Funktionen von anderen Dingen, die Motoren normalerweise unterstützen. Ich habe die Antwort von Byte56 gelesen, die mich daran interessiert hat, die Engine zu einem Entitätssystem zu machen. Es würde immer noch eine HTML5-Spiel-Engine bleiben, mit der Grundphilosophie der Szene, aber es sollte die dynamische Erstellung von Entitäten aus Komponenten unterstützen.
Das Problem, das ich jetzt habe, besteht darin, mein altes Motorkonzept in dieses neue Programmierparadigma einzufügen. Dies sind einige der Definitionen aus den vorherigen Fragen, die aktualisiert wurden:
Eine Entität ist eine Kennung. Es hat keine Daten, es ist kein Objekt, es ist eine einfache ID, die einen Index in der Szenenliste aller Entitäten darstellt (die ich eigentlich als Komponentenmatrix implementieren möchte).
Eine Komponente ist ein Datenbehälter, jedoch mit Methoden, die diese Daten verarbeiten können. Das beste Beispiel ist eine
Vector2D
oder eine "Position" -Komponente. Es hat Daten:x
undy
, aber auch einige Methoden , die auf die Daten ein wenig einfacher machen die Bedienung:add()
,normalize()
, und so weiter.Ein System kann mit einer Reihe von Entitäten betrieben werden, die bestimmte Anforderungen erfüllen. In der Regel müssen die Entitäten über einen festgelegten Satz von Komponenten verfügen, um betrieben werden zu können. Das System ist der "Logik" -Teil, der "Algorithmus" -Teil, alle von den Komponenten bereitgestellten Funktionen dienen lediglich der einfacheren Datenverwaltung.
Kamera
Die Kamera verfügt über eine Vector2D
Positionseigenschaft, eine Rotationseigenschaft und einige Methoden zum Zentrieren um einen Punkt. Jedes Bild wird zusammen mit einer Szene einem Renderer zugeführt, und alle Objekte werden entsprechend ihrer Position verschoben. Die Szene wird dann gerendert.
Wie könnte ich ein solches Objekt in einem Entitätssystem darstellen? Wäre die Kamera eine Entität, eine Komponente oder eine Kombination (gemäß meiner Antwort )?
Teilchenemitter
Das Problem, das ich mit meinem Partikelemitter habe, ist wiederum, was was sein sollte. Ich bin mir ziemlich sicher, dass Partikel selbst keine Entitäten sein sollten, da ich über 10.000 von ihnen unterstützen möchte, und ich glaube, dass das Schaffen so vieler Entitäten meine Leistung stark beeinträchtigen würde.
Wie könnte ich ein solches Objekt in einem Entitätssystem darstellen?
Input Manager
Das letzte, worüber ich sprechen möchte, ist, wie mit Eingaben umgegangen werden soll. In meiner aktuellen Version der Engine gibt es eine Klasse namens Input
. Hierbei handelt es sich um einen Handler, der die Ereignisse des Browsers, z. B. das Drücken von Tasten und das Ändern der Mausposition, abonniert und außerdem einen internen Status beibehält. Die Player-Klasse verfügt dann über eine react()
Methode, die ein Eingabeobjekt als Argument akzeptiert. Dies hat den Vorteil, dass das Eingabeobjekt in .JSON serialisiert und dann über das Netzwerk gemeinsam genutzt werden kann, um reibungslose Mehrspielersimulationen zu ermöglichen.
Wie übersetzt sich dies in ein Entitätssystem?