Open Source komponentenbasiertes Spiel oder Engines?


15

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?

Antworten:


7

Persönlich denke ich, dass es keine guten Beispiele gibt, hauptsächlich, weil die Definition eines "komponentenbasierten Systems" für Spiele so lose definiert ist, dass es so gut wie nichts bedeuten kann.

In dieser Antwort finden Sie möglicherweise einige hilfreiche Informationen: So implementieren Sie ein komponentenbasiertes System für Elemente in einem Web-Spiel

Insgesamt besteht der Ansatz jedoch einfach darin, jede Art von GameObject oder Actor aus einer großen Klasse, die alles Verhalten verarbeitet, in eine einfachere Klasse zu verwandeln, die Objekte enthält, die Verhalten ausführen. Ich denke, dass es oft der beste Weg ist, dies selbst durchzuarbeiten und verschiedene Komponenten zu entwickeln, die zu Ihrem Spiel passen.


Ich höre das. Bei dem Versuch, gute Ressourcen zu finden, stellte ich fest, dass fast jeder Mensch eine andere Terminologie verwendet, um Dinge zu beschreiben. Es war schwierig, verschiedene Implementierungen zu vergleichen, wenn Sie die Hälfte der Zeit damit verbracht haben, die grundlegenden Strukturen zu übersetzen. Entitätssystem, Komponentensystem, Spielobjekt, Vorlage, Assembly, Component Assemblage, etc ...
Nachsicht

2

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 .


1

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.


1

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.