Ich habe über Entity System Frameworks speziell Artemis gelesen. Ich versuche zu entscheiden, ob es für mich richtig ist. Ich arbeite streng an auf Kacheln basierenden 2D-Pixelkunstspielen, und ich glaube nicht, dass sie jemals so ressourcenintensiv sein werden. Ich habe in der Vergangenheit immer Standard-OOP mit viel Vererbung verwendet.
Mein Verständnis des Entity System Framework im Moment (ich bin mir nicht sicher, ob ich es noch vollständig verstehe) ist:
- Entitäten sind nichts als IDs
- Komponenten sind nichts anderes als dumme Daten, die einem Entitätskomponentenpool hinzugefügt werden
- Systeme sind Aktualisierungsfunktionen, die mit der Welt verbunden sind, um jede Entität zu verarbeiten, die der Systems-Komponentensignatur entspricht
Wenn mein Verständnis stimmt, habe ich einige Probleme damit, Tilemaps und AI Behavioral Trees in dieses Framework einzufügen. Ich werde in Zukunft nach AI fragen.
Sollte eine Tilemap in dieses Framework eingebaut werden? Oder sollte es separat gehalten werden, um die Erstellung mit einem Tilemap-Editor zu vereinfachen?
Wenn die Kachelkarte in dieses Framework integriert werden soll, ist jede Kachel eine andere Entität? Und die Tilemap ein System? Oder ist die Tilemap selbst eine einzelne Entität, auf der die Vererbung aufbaut?
Wenn die Tilemap sperat ist, wie lassen sich Kollisionserkennungsobjekte am besten mit der externen Tilemap vergleichen?
Ich verstehe, dass mehrere Optionen, die ich aufgelistet habe, möglicherweise richtig sind, aber wenn jemand dies in der Vergangenheit getan hat, kann er möglicherweise etwas Licht in meine Verwirrung bringen. Vielleicht gibt es eine andere Alternative, an die ich nicht gedacht habe?
Vielen Dank.
quelle
Antworten:
Ich habe ein Entity-Component-Framework (ähnlich wie Artemis) implementiert, nachdem ich bereits eine Weile in der Entwicklung war, aber ich glaube nicht, dass ich die Dinge anders gemacht hätte, wenn ich von einer leeren Tafel ausgegangen wäre.
Ich habe meine Welt völlig getrennt vom Entity-Framework. Es machte für mich einfach keinen Sinn, die Welt in eine Art Einheit oder eine Sammlung von Einheiten zu verwandeln. Meine Welt ist 3D mit Würfeln, aber ich glaube, dasselbe gilt für Fliesen. Wesenheiten machen alles andere auf der Welt aus, aber das Terrain ist getrennt. Wenn Würfel jedoch entfernt werden, erzeugen sie "materielle" Entitäten.
Die Kollisionserkennung ist nicht allzu schwierig. In Ihrer Welt gibt es wahrscheinlich
isSolidAt(x,y)
Typmethoden, die Ihr Kollisionssystem verwenden wird. Ehrlichkeit, das habe ich schon heute einmal in einer anderen Antwort gesagt , tu, was für dich am sinnvollsten ist. Sie verletzen keine Regeln, indem Sie die Kachelzuordnung trennen oder zu einer Entität machen. Was auch immer Sie Ihren Kopf herumwickeln können, ist das Beste. Für mich bedeutete das, die Welt getrennt zu halten und alles andere zu einer Einheit zu machen.quelle
isSolidAt
?Ich habe tilemap als separate Komponente zur Entität hinzugefügt (mit allen darin enthaltenen Kacheln) und es gibt auch einen separaten Renderer für die Kachelkarte, sodass ich sie in 3d oder in 2d rendern kann. Alle Kacheln als Entitäten zu erstellen ist möglich aber zu teuer.
sowas in der Art:
Der Vorteil der Trennung von Zeichnung und Logik ist die Grundidee des MVC-Musters
quelle