Hallo da ich nun einige einfache Spiele wie Pong und Pacman geschrieben habe wollte ich mich mal an etwas größeres setzen, man wächsed schlieslich mit der Herausforderung. Ich habe mir vorgenommen ein Entity System zu schreiben, welches möglichst wiederverwendbar sein soll um später andere Spiele damit schreiben zu können. Ziel-Genre ist erstmal ein 2D-RPG. Dabei möchte ich das alle Spiel Elemente von der Basis Entity Klasse erben. Soweit so gut ich möchte das System aber möglichst so halten das ich neue Entity Arten hinzufügen kann ohne für jeden neuen Typ eine eigene Klasse zu schreiben. Ich hab mir gedacht das Entity´s per XML oder durch reine Text Datein definiert werden und dann per Skript gesteuert werden. Mal ein kleines Beispiel:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
|
<Entity typ="Mensch">
<var name="age" typ="int"/>
<var name="name" typ="string"/>
</Entity>
<Entity typ="Drache">
<var name="health" typ="int"/>
<var name="speed" typ="int"/>
<var name="attackpower" typ="int"/>
</Entity>
|
Und mal ein Lua-Skript welches dann das verhalten des Drachen steuern könnte. (ich bin momentan etwas aus der Übung was Lua angeht daher ist das eher Pseudocode)
|
Quellcode
|
1
2
3
|
function Drache.OnUpdate()
if Drache.canSeePlayer() then Drache.attackPlayer();
end
|
Wie ich Lua in C++ einbinden kann weis ich dank des Buches das ich momentan lese ("Game Coding Complete" in der 3. Auflage). Jetzt frage ich mich aber ob es sinnvoll ist der Entity Klasse nur eine Update Methode zu geben. Da ich später Events benutzen möchte um die Entitys zu steuern. Zum Beispiel möchte ich das NPC ein OnPlayerInteraction Event bekommt welches dann für einen Händler das Handelfenster öffnet und bei einem "normalen" NPC dann ein Text angezeigt wird.
Kann man in C++ den auch wie in C# Reflection nutzen um so der Entity Klasse wie oben beschrieben verschiedene Variablen zuordnen zu können? Ich stehe ein bisschen auf dem Schlauch ob das ganze so hinterher überhaupt funktionieren kann. Nochmal mein Ziel besteht darin ein Entity System zu schreiben mit dem ich dann später in Lua/XML das Spiel bzw. die Story zusammen setzen kann.