Gibt es bestehende komponentenbasierte FOSS-Frameworks? [geschlossen]

25

Das Paradigma der komponentenbasierten Spielprogrammierung wird immer beliebter. Ich habe mich gefragt, ob es Projekte gibt, die ein wiederverwendbares Komponenten-Framework bieten. In jeder Sprache ist mir das wohl egal. Es ist nicht für mein eigenes Projekt, ich bin nur neugierig.

Konkret meine ich, gibt es Projekte, die eine Basisklasse Entity, eine Basisklasse Componentund möglicherweise einige Standardkomponenten enthalten? Es wäre dann viel einfacher, ein Spiel zu starten, wenn Sie das Rad nicht neu erfinden möchten, oder wenn Sie ein Spiel möchten GraphicsComponent, das Sprites mit Direct3D unterstützt, aber Sie glauben, dass es bereits ein Dutzend Mal ausgeführt wurde.

Ein schnelles Googeln taucht auf Rusher . Hat jemand davon gehört / benutzt jemand es? Wenn es keine populären gibt, warum dann nicht? Ist es zu schwierig, so etwas wiederverwendbar zu machen, und sie müssen stark angepasst werden? In meiner eigenen Implementierung habe ich eine Menge Boilerplate gefunden, die sich in ein Framework einschieben ließen.

Tesserex
quelle
4
Du solltest der Erste sein, der eins schreibt! :)
Ricket
1
Nun, ich habe eine in C # für mein eigenes Projekt geschrieben. Vielleicht könnten wir alle dazu beitragen?
Tesserex
Ich wäre absolut bereit, an diesem C # -Projekt zu arbeiten. Ja, es gibt keinen großen Konsens darüber, wie ein Standard funktionieren sollte, aber vielleicht könnten wir uns auf XNA konzentrieren (was auch immer Ihr Boot schwimmt). Nur weil ein Haufen Giganten nicht erklärt hat, wie es am besten geht, heißt das nicht, dass wir es nicht versuchen / experimentieren können.
Michael Coleman
Vielleicht, weil komponentenbasiertes Design mehr Projektmanager als Programmierer anzieht
M. Utku ALTINKAYA

Antworten:

45

Wenn es keine populären gibt, warum dann nicht?

Denn es gibt keinen Konsens darüber, wie ein solcher Rahmen funktionieren würde.

In einem Thread auf Gamedev.net stellte ich fest, dass es, wenn Leute über komponentenbasierte Spielesysteme sprechen, tatsächlich mindestens 8 mögliche Permutationen gibt, die davon ausgehen, dass sie funktionieren, basierend auf 3 verschiedenen Faktoren:

Innenborder vs. Außenborder - Sollen Komponenten zu einer Entität zusammengefasst werden oder sollten sie Teil eines Subsystems sein und nur durch eine Entitäts-ID verknüpft werden?

Statische vs. dynamische Komposition - sollten Entitäten aus einer bekannten Menge von Komponenten bestehen (z. B. 1 Physik, 1 Animation, 1 KI usw.), die im Code über bekannte Schnittstellen kommunizieren können, oder können Entitäten beliebige Mengen von Komponenten hinzugefügt werden sie (mit zugehörigen Strategien zur Lokalisierung anderer interessierender Komponenten)

Daten zu einer Komponente im Vergleich zu Daten zu einer Entität - Sollen Daten von der Komponente gespeichert werden, die in erster Linie damit arbeitet? Oder sollten Daten auf der Entität in einem gemeinsam genutzten Bereich gespeichert werden, auf den alle Komponenten zugreifen können?

Darüber hinaus gibt es weitere Fragen, wie die Komponenten kommunizieren sollen (über die gemeinsam genutzten Daten? Über Funktionszeiger? Über Signale / Slots? Oder überhaupt nicht?), Wie sie aktualisiert werden sollen (in einer festen Reihenfolge basierend auf dem Komponententyp? A per -entity-Reihenfolge zum Zeitpunkt der Erstellung definiert (basierend auf einer topologischen Art von Komponenten-Abhängigkeiten?) usw.

Jede dieser Optionen ist völlig willkürlich und alles, was Sie mit einem System tun können, kann mit dem anderen System durchgeführt werden. Aber die Art und Weise, wie Sie es codieren müssen, ist in jedem Fall ganz anders. Und die Leute scheinen eine starke Meinung darüber zu haben, welcher Weg für sie am besten funktioniert.

Im Moment sind die Leute immer noch zu sehr von der Idee gefangen, dass Komponenten ein Ersatz für die Objektorientierung sind (was sie nicht sind) und sie stellen sich auch vor, dass sie eine massive Veränderung gegenüber der traditionellen Herstellung von Spielen darstellen (was sie auch nicht waren) - Die Menschen haben die verschiedenen Subsysteme in ihren Entitäten seit Ewigkeiten ausgeklammert. Vielleicht haben sich die Dinge in ein paar Jahren beruhigt und die Leute entscheiden sich für einen oder zwei ziemlich standardmäßige Ansätze.

Kylotan
quelle
1
Ich weiß, dass diese Antwort alt ist, aber sie ist jetzt falsch: Es gibt populäre Frameworks und es gibt nur noch sehr wenige Debatten zu diesem Thema. Beim Schreiben von Spielen spielen die meisten der oben genannten Fragen keine Rolle: Entweder haben sie keinen Einfluss auf das Design des Codes, oder ein Ansatz ist schnell und wiederverwendbar, wenn die anderen nicht vorhanden sind. In der Praxis gibt es einige beliebte Frameworks - das Wiki, auf das in einer der anderen Antworten verwiesen wird, ist ein guter Ausgangspunkt (einige von uns pflegen es, um das Auffinden der tatsächlich gelieferten Spiele und Frameworks zu erleichtern)
Adam
1
@Adam: Ich hätte gerne einen Link zu den Details des Ansatzes, der das Darwin Evolution Match gewonnen hat. Wenn ich Details sage, möchte ich nichts über Innen- und Außenborder hören. Ich möchte etwas über Hash-Maps, Vektoren, Allokatoren, Private, Public, Loops, Const ... LOW-Level-Details hören.
v.oddou
@ v.oddou hat schon jemand einen Link zum Wiki als Antwort gepostet (siehe unten). Du willst Details? Es ist voller Quellcode .
Adam
10

Es gibt ein Wiki, das Beispiele für all diese Dinge sammelt:

http://entity-systems.wikidot.com/

... zusammen mit Erläuterungen zu den Unterschieden zwischen den verschiedenen Ansätzen.


quelle
Ash und Artemis (beide im Wiki) haben sich in der Tat als beliebt erwiesen, beide werden für die kommerzielle Spieleentwicklung verwendet, zusammen mit Hobby-Spieleentwicklern.
Adam
4

Überprüfen Sie diese Frameworks, die ich im Zusammenhang mit dieser Architektur herausgefunden habe ...

www.burgerengine.com

PushButtonEngine

Arthemis Framework - https://github.com/artemis-esf/artemis-framework/tree/master/src/com/artemis

Ein Blick auf Unity Api. Sie finden viele Informationen zur komponentenbasierten Architektur. (Wird die Liste aktualisieren, sobald ich etwas mehr finde ...)

Aktualisieren:

      https://code.google.com/p/spartanframework/

Dies erklärt Entity-Systeme auf gute Weise ... http://piemaster.net/2011/07/entity-component-primer/

Ayyappa
quelle
2

Es gibt eine Push Button Engine für Flash: http://pushbuttonengine.com/

Und es gibt Panda3D für c ++ / python: panda3d dot com (sorry, ich darf nur 1 URL pro Post als n00b)

Ich bin mir sicher, dass da draußen noch jede Menge mehr sind :)

CJ Hanson
quelle