Nehmen wir an, ich habe ein Spiel in C ++ geschrieben. Aber ich möchte einige Modding- oder Scripting-Funktionen hinzufügen. Wie würden Sie Ihrem Spiel eine Skriptfunktion hinzufügen?
Nehmen wir an, ich habe ein Spiel in C ++ geschrieben. Aber ich möchte einige Modding- oder Scripting-Funktionen hinzufügen. Wie würden Sie Ihrem Spiel eine Skriptfunktion hinzufügen?
Antworten:
Zunächst sollten Sie entscheiden, welcher Teil Ihres Spiels als Skript ausgeführt wird. Eine Option ist ein vollständig skriptgesteuertes Spiel in dem Sinne, dass die zeitkritischen Backend-Operationen in C ++ kodiert sind, die gesamte Spielelogik jedoch in der Skriptsprache vorliegt. Designer verwenden das Backend als API, das von der Skriptsprache auf hoher Ebene aufgerufen wird. Auf der anderen Seite kann es nur wenige Stellen geben, an denen Skripte verwendet werden, wie z. B. die Benutzeroberfläche oder Skriptsequenzen. Der Großteil des Spielcodes befindet sich noch in C ++. Jeder Ansatz bietet Vorteile (Geschwindigkeit, Flexibilität, Kompilierungszeit, Umfang des Spiels usw.), dies muss jedoch im Voraus festgelegt werden.
Wenn Sie wissen, wie Sie Skripte verwenden möchten, müssen Sie sich jetzt entscheiden, ob Sie eine vorhandene Skriptsprache oder Ihre eigene domänenspezifische Sprache verwenden möchten . Heutzutage stehen viele Skriptsprachen mit unterschiedlichen Designzielen und Zielgruppen zur Auswahl. Daher bin ich mir nicht sicher, ob es sich lohnt, eine eigene zu erstellen. Wenn Sie sich dazu entschließen, Ihre eigenen zu implementieren, finden Sie hier einige Ressourcen:
Lua ist eine beliebte leichtgewichtige und einfach einzubettende Skriptsprache. Es verwendet einen Stack für die Kommunikation zwischen dem Host und der eingebetteten Sprache und wurde erfolgreich in vielen professionellen Spielen eingesetzt . Sol2 vereinfacht das Binden von Lua und C ++. Wenn Sie die Syntax von Lua nicht mögen, ist Moonscript eine Sprache, die zu Lua kompiliert wird und eine schöne Reihe von Funktionen hinzufügt.
Weitere Optionen sind AngelCode , mit dem Sie C- und C ++ - Funktionen direkt aufrufen können. Python und Ruby sind etwas komplexer in der Einbettung, aber sehr angenehm zu programmieren. Wenn Sie Python einbetten möchten, schauen Sie sich Boost.Python an . Eine andere Idee ist die Einbettung von JavaScript, um die für Browser entwickelten schnellen Scripting-Engines zu nutzen (siehe V8 und SpiderMonkey ).
Ich schrieb einen Beitrag über GameMonkey Skript zu einem Spiel Einbettung mit Dragon SDK hier .
Grundsätzlich besteht die Idee darin, Ihre C \ C ++ - Funktionen für die von Ihnen gewählte Skriptsprache verfügbar zu machen und sie in Ihrem Skript zu verwenden. In meinem Tutorial habe ich zwei Funktionen aus DragonFire SDK verfügbar gemacht. Beim Spielstart rufe ich die onStart-Funktion vom Skript aus auf und beim Aktualisieren rufe ich die onTimer-Funktion vom Skript aus auf.
Hoffentlich hilft das!