Ich habe etwas über komponentenbasiertes Spieledesign gelesen, habe aber immer noch Probleme herauszufinden, wie genau Sie es implementieren würden. Gibt es gute Beispiele für komponentenbasierte Spiele oder Spiele-Engines, die ich lesen könnte, um ein besseres Gefühl dafür zu bekommen?
quelle
Hier sind einige Ressourcen, die Ihnen gefallen könnten:
Es gibt diesen erstaunlichen Thread. Es ist keine Spiel-Engine selbst, aber das Design und die Diskussion sind großartig.
Eine Frage zu StackOverflow zu einem sehr ähnlichen Thema.
Zur Beantwortung der ursprünglichen Frage ist das Elephant-Framework in C # genau das, was Sie möchten: Es wurde eingestellt, ist aber hier als Referenz für die Implementierung noch vorhanden .
quelle
Diese Seite beginnt mit einer grundlegenden Implementierung.
Das meiste oben ist von diesem Artikel bei T = Machine inspiriert
Ich begann mit einer grundlegenden Implementierung, die von den beiden oben genannten Links inspiriert war. Ich bin mir ziemlich sicher, dass ich viel von der reinen Theorie der Komponentensysteme abgewichen bin, und es gibt zweifellos Fehler, aber es könnte sich als nützlich erweisen, wenn Sie nach einfachen Beispielen suchen.
Bricle (C # / XNA)
Momentan werden nur einige grundlegende Entities geladen , einige Events gehandhabt usw. Die wichtigsten Speicherorte, die Sie suchen, sind der Ordner Engine.EntitySystem und wahrscheinlich der PlayScreen, in dem Entities tatsächlich erstellt werden.
Es war relativ einfach, einen einfachen typbasierten Komponentenspeicher zu erstellen und diesen hinter einem allgemeinen EntityManager zu verstecken.
Die erste Herausforderung, der ich begegnet bin, bestand darin, dass einzelne Systeme möglicherweise mehrere Komponententypen erfordern (z. B. physische Komponenten und InputMoveable). Um die relationale Datenbanksprache zu verwenden, musste ich eine Möglichkeit finden, eine JOIN-Abfrage durchzuführen. Zu diesem Zweck habe ich einen anderen Auflistungstyp für Entitäten erstellt, die aus den Abfragen für übereinstimmende Komponententypen erstellt wurden. Jede Entitätsauflistung ist mit einem OnEntityCreate-Ereignis verknüpft und überprüft, ob sie übereinstimmt. Immer noch ein paar Bugs da.
Die zweite Herausforderung bestand darin, ein "Spielobjekt" zu erstellen - ich nannte sie Vorlagen. Hier bin ich nach Angaben von T = Machine wahrscheinlich nicht sehr rein, aber es scheint zu funktionieren. Vorlagen gruppieren Komponenteninstanziierungen und ermöglichen eine einfachere Entitätszusammensetzung (dh der Ball ist ziehbar und physisch).
Ich hoffe, das ist hilfreich - Entity- / Komponentensysteme können eine Herausforderung sein, um einige der anfänglichen Hürden zu überwinden.
quelle
Eine andere, die ich nicht benutzt habe, die ich aber ein bisschen durchgesehen habe, ist Artemis . Gut kommentiert und sehr aktiv. Ursprünglich ein Java-Framework, wurde aber nach C # / XNA portiert.
quelle