Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.01.2016, 19:00

[Technical Game Design] Entity - Component - System

Hallo liebe Community,

Mir sind heute wieder ein paar Fragen zu einem Entity - Component - System gekommen.
Nachdem ich noctarius heute schon kräftig ausgefragt habe, wollte ich hier nochmal einen Thread erstellen, um mein Verständnis für dieses Konzept weiter zu verbessern und mit euch zu diskuttieren, was denn das beste Konzept hierfür sein könnte.
@noctarius: Vielen Dank nochmal dafür! :D

Eine Game Engine besteht aus diversen Komponenten, z.B. Graphic Engine, Sound Engine, Physics Engine, Network Engine usw.
Desweiteren gibt es nochmal einen Core, wo es z.B. einen Resource Manager, Math libraries, Util Klassen, LWJGLLoader, Configuration Klassen, Logger usw. gibt.
Alle Sub Engines sollten, soweit es geht, voneindner entkoppelt sein.

Hier mal 2 Konzepte:



Quellen: http://de.slideshare.net/AttilaJenei/gam…ecture-34006558, Buch: "Game Engine Architecture"

Kurz zusammen gefasst, was ich unter Entity - Component - System verstehe:
Es gibt folgende Elemente des Entity Systems:

  • Entity - Das Spiel Objekt, am besten einfach eine Integer Unique ID
  • Component - hält die Daten
  • Controller - updatet / rendert

Wenn ich das richtig verstanden habe, gibt es z.B. Controller für den Renderer, das Sound System usw., oder?

Quelle: http://entity-systems.wikidot.com/es-terminology

Inwieweit hängen welche Komponenten zusammen?
Die Graphics Engine muss ja die Sound Engine nicht kennen, aber alle benötigen das Entity System, oder?
Kann man das umgehen bzw. verbessern?

In diesem Artikel http://m.heise.de/developer/artikel/Comp…en-2262126.html auf Seite 2 und 3 habe ich gelesen, dass man mittlerweile vermehrt auf BluePrints bzw. ein zentrales Event System setzt.
Wie müsste eine Architektur dafür aussehen?

Was nutzt ihr so für Konzepte?
Welche findet ihr am besten?
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von »JuKu« (07.01.2016, 19:16)


cFx

Frischling

  • Private Nachricht senden

2

08.01.2016, 10:38

Vielen dank für die Links =)

Informiere mich nebenbei auch ein wenig über Game-Engine-Strukturen, zZ arbeite ich http://www.amazon.de/SFML-Game-Developme…r/dp/1849696845 durch und da wird auch die Entity-Component-System-Architektur verwendet. Anfangs sehr verwirred, aber gefällt mir vom Ansatz sehr gut.

Ist ja eigentlich nichts anderes, als das Prinzip einer Theatervorführung oder eines Musicals =)Logisch schlüssig. Obwohl ich jetzt nicht wirklich andere Architekturen ausprobiert habe, gefällt es mir sehr gut.

Würde mich freuen, wenn man hier noch weitere wertvolle Tipps in Zukunft lesen könnte.

P.S. Da du ja schon jemanden ausgefragt hast, würde es dir was ausmachen deine erhaltenen Informationen mit uns zu teilen :vain:

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

08.01.2016, 10:49

Ich habe meine bisherigen Frameworks für Spiele ohne Komponentensystem entwickelt. Sagen wir mal so: Komponentensystem machen solange unheimlich Spaß, bis die Komponenten voneinander Abhängig werden, dann fließt wieder alles zusammen. Das lässt sich tatsächlich sehr schwierig vermeiden. Frag dich mal, varum du viel Code bspw. in Unity hast, der da heißt GetComponent<>() ;)

Allerdings heißt das nicht, dass das ein schlechtes Pattern ist, ganz im Gegenteil. Aber ich bin bisher sehr gut ohne ausgekommen. Ich finde den Behavior-Ansatz wenn ich ehrlich bin deutlich besser als ein Component-Ansatz, wie es bei Construct 2 implementiert ist, den habe ich überlegt einzubauen. Sie sind ähnlich, aber meiner Meinung nach nicht gleich, da ein Behavior ein komplettes Verhalten inklusive der Eigenschaften selbst definiert.

Zum Thema zentrale Events habe ich auch eine Meinung: ich weiß nicht, ob das immer Sinn macht. In der Regel müssen nicht alle, sondern nur ein Teil miteinander kommunizieren. Dafür ist ein Observer-pattern zwischen den konkreten Komponenten besser geeignet als über eine zentrale Stelle, das verleitet nur meiner Meinung nach dazu, dass man alles miteinander vernetzt, was man vielleicht eben nicht tun sollte. Aber meine Vermutiung der Zentralität ist wie oftmals die mittlerweile sehr übliche Cache-Freundliche Implementierung.

Wenn du da sehr interesse hast, rate ich dir zu folgendem Buch (wurde hier im Forum schonmal diskutiert): Game Programming Patterns. Ich fand es trotz meiner nicht so wenigen Erfahrung in der Entwicklung sehr interessant und hier da sehr erhellend (oder auch bestätigend). Er beschreibt auch, wann man ein Pattern einsetzen sollte und wann besonders nicht, was hat man für Möglichkeiten usw.

Werbeanzeige