Welche Skriptsprache würden Sie für ein C ++ - Spielprojekt empfehlen? [geschlossen]

14

Mit Skripten meine ich hier nicht nur das Einfügen von Konfigurationsdaten in ein Skript, sondern auch das Skripten von Teilen des Projekts wie Klassenmethoden, testspezifische Spielschleifen usw. Dies würde nicht nur die Entwicklung beschleunigen, sondern auch den Spielern ermöglichen, einige davon zu sehen Skripte, um einige Aspekte des Spiels zu optimieren.

Einige Sprachen wie Lua haben einige Wrapper wie Luabind, aber als ich es in der Vergangenheit verwendet habe, hatte es Probleme, weil es die Neudefinition von Methoden in einem Kontext der Vererbung nicht unterstützte.

Was sind Ihre Vorschläge für Sprachen / Wrapper, die Sie verwenden oder nicht verwenden sollten?

Frédérick Imbeault
quelle

Antworten:

9

Lua-fähige Videospiele
Lua-fähige Spiele-Engines

Ich denke, Lua ist der beste Schuss.

In diesem Artikel geht es um die Integration von Lua und C ++. Es sagt:

LuaBind ist ein großartiges Produkt, aber für mich sah es zu kompliziert aus. Zum einen ist es nicht einfach, dem Code zu folgen, wo sich die Klassen und Objekte befinden. Auch zu sehen, dass ich Lua in eine wxWidgets-Anwendung integrieren wollte, war das Verwenden von Vorlagen ein bisschen ein Nein-Nein (Sie können plattformübergreifende Probleme auf der wxWidgets-Site nachlesen).

Es gibt viele andere Bindungsbibliotheken:

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~ Celes / Tolua /

Was ist der beste C ++ / Lua-Wrapper?

Einfach auswählen und genießen.

lcpp
quelle
Ja, Lua ist ziemlich einfach und sehr einfach in C zu integrieren. Tatsächlich ist das das Hauptziel von Lua, eine eingebettete Sprache zu sein.
Marco Mustapic
Vielen Dank für den Hinweis auf LuaBind. Vielleicht überzeugt mich das Stöbern in anderen Bindungsbibliotheken, dass ich Lua wieder
nehme
Ich würde jedoch vorschlagen, dass Sie Ihre Skripte nur im Haupt-Thread ausführen und einen Pool-Allokator dafür bereitstellen, wenn die Leistung ein Problem darstellt.
Kylotan
5

Ich habe Chaiscript gemocht . Ich habe es nicht sehr lange benutzt, aber es scheint ziemlich solide zu sein.

Im Gegensatz zu Python oder Lua wurde es von Grund auf für die Verwendung mit C ++ entwickelt. Der Bindevorgang scheint viel sauberer zu sein als bei Luabind / etc.

Hier ist die Zusammenfassung der Website:

ChaiScript ist die erste und einzige Skriptsprache, die von Grund auf unter Berücksichtigung der C ++> - Kompatibilität entwickelt wurde. Es ist eine ECMAScript-inspirierte, eingebettete, funktionsähnliche Sprache.

ChaiScript ist unter der BSD-Lizenz lizenziert.

Riley Adams
quelle
Interessant. Was ist mit Leistungstests? Gibt es einen ChaiScript / Lua / Python-Vergleich?
topright
Sehr interessant, gibt es irgendwelche Nachteile / Fehler / Leistungsprobleme, die Sie bisher durchgemacht haben?
Frédérick Imbeault
Ich habe noch keine Benchmarks gesehen, aber ich hatte noch keine Leistungsprobleme ... Mein bisheriger Hauptaspekt wäre, dass es nicht implizit zwischen numerischen Typen konvertiert wird (daher wird ein Fehler angezeigt, wenn Sie ein int an übergeben eine Funktion, die einen Schwimmer nimmt, etc).
Riley Adams
1
Nur zu Ihrer Information, da dieser Kommentar jetzt 6 Jahre alt ist - ChaiScript führt jetzt implizite numerische Konvertierungen durch.
Lefticus
5

Ich würde Lua empfehlen .
Python ist auch sehr beliebt. Viele vorgestellte Spiele-Engines (zum Beispiel Blender) verwenden es.
C ++ :: Boost verfügt über eine Bibliothek für die Arbeit mit Python.
Ich habe über Eichhörnchen gelesen , es aber nicht benutzt.

Sie können diese Game Engine-Übersicht lesen . Es gibt eine ScriptingSpalte. Sie sehen, dass Lua und Python die beliebtesten Skriptsprachen sind.

oben rechts
quelle
Was Boost angeht, denke ich, dass es vielleicht eine riesige Bibliothek ist und viele Dinge nicht in allen Projekten nützlich sind. Tatsächlich benutzen Luabind Boost oft und es ist eines der Dinge, die ich nicht mochte.
Frédérick Imbeault
1
Ich würde sagen, dass es ein Vorteil ist. Sie haben viele, viele sofort einsatzbereite Lösungen. Und Ihr Projekt hat nur 1 externe Abhängigkeit - Boost. Nicht viele kleine Bibliotheken (die unterschiedliche Stile, Ansätze und Lizenzen verwenden und möglicherweise implizite externe Abhängigkeiten aufweisen), die schwer zu aktualisieren, mit Ihrem Code zu synchronisieren und zu warten sind.
topright
1
Außerdem fügen Sie nur die Boost-Bibliotheken (Header) ein, die Sie benötigen. Boost ist riesig, aber es ist dir egal, bis du dies oder das brauchst.
topright
Und was Python und Lua betrifft, gibt es einige Wrapper für C ++, mit denen Sie Klassenmethoden neu definieren, neue Methoden erstellen usw. können? Und kann diese Funktion aus Sicherheitsgründen über den C ++ - Code gesteuert werden? Wie ich bereits sagte, macht LuaBind diese Dinge, scheitert jedoch in einem Vererbungskontext, der in einem Spielprojekt durchaus üblich ist. Methoden, die ich neu definieren möchte, sind zum Beispiel, Tests spezifische Spielschleife, Update-Methoden von Entitäten wie Spieler, Update-Methode der Spielwelt selbst, etc.
Frédérick Imbeault
Lua hat keine Klassen und Objekte, aber sie können durch Tabellen emuliert werden. Hier ist eine Lua-Bibliothek für OOP, die ich bevorzuge: love2d.org/wiki/MiddleClass .
topright
4

Warum nicht selbst bauen?

Wenn Sie Zeit, Geduld und Lernbereitschaft haben, können Sie jederzeit versuchen, eine eigene Skript-Engine mit allen Funktionen und der erforderlichen Syntax zu entwickeln.

Vorteile

  1. Sie lernen einen interessanten Teil der Informatik kennen.
  2. Durch die Entwicklung einer internen Skript-Engine haben Sie die vollständige Kontrolle von Anfang bis Ende, indem Sie die Engine genau auf Ihre Bedürfnisse zuschneiden können.
  3. Wenn Sie später Änderungen vornehmen müssen, können diese das Erkennen der In- und Out-Werte Ihrer eigenen Codebasis erleichtern, anstatt die In- und Out-Werte anderer zu lernen.
  4. Sie müssen sich nicht darum kümmern, Ihren Motor mit den Patches anderer auf dem neuesten Stand zu halten.

Nachteile

  1. Zeit. Nicht viele Leute haben es. Wenn Sie JETZT etwas benötigen, probieren Sie einen bereits vorhandenen Motor aus (wie einer der bereits vorgeschlagenen).

  2. Geschwindigkeit. Viele der vorhandenen Skriptmodule sind sehr schnell - eine benutzerdefinierte Lösung ist möglicherweise nicht so schnell.

  3. Teamgröße. In vielen vorhandenen Scripting-Engines arbeiten größere Teams an der Codebasis, egal ob es sich um private Teams oder globale Freiwillige handelt. Für Code ist etwas zu sagen, das von vielen anderen Personen überprüft und erneut überprüft wird.

  4. Ein Skriptmodul erfordert eine gewisse Anfangsplanung, um effektiv zu arbeiten. Es gibt eine Menge Grundlagen, die ebenfalls implementiert werden müssten und möglicherweise überhaupt nicht mit der eigentlichen Skript-Engine zu tun haben.

  5. Ihre Playerbase / Entwickler müssten sich an Ihre Skript-Engine gewöhnen. Dies ist möglicherweise kein Problem, wenn die Syntax und Funktionalität den meisten modernen Scripting-Engines nahe kommt. Beachten Sie dies jedoch.

Dies ist keine vollständige Liste. Wenn Sie feststellen, dass Sie im Back-End einer vorhandenen Skriptsprache zahlreiche Änderungen vornehmen müssen, um die gewünschten Funktionen zu erhalten, sollten Sie sich nach einer anderen Engine umsehen, die Ihren Anforderungen besser entspricht, oder einfach eine eigene erstellen.

Mir ist klar, dass es den Leuten Spaß macht, sich mit "Faulheit" zu beschäftigen und "das Rad nicht neu zu erfinden", aber ich denke, es gibt etwas zu lernen, wie dieses Zeug gemacht wird. Und eine bestimmte Implementierung ist wahrscheinlich besser für Ihr Projekt als eine generische Implementierung.

"Erstellen von Skriptsystemen in C ++" scheint der / die bevorzugte (n) Artikel zu sein, den / die die Benutzer bei der Diskussion des Themas teilen: http://www.gamedev.net/reference/list.asp?categoryid=76

Dalin Seivewright
quelle
2
Ich stimmte zu, dass dies einen besonderen pädagogischen Vorteil hat. Dennoch erfordert es einige Kenntnisse und Fertigkeiten in der Theorie der Programmiersprachen (die viele Leute für möglich halten) und einige Kenntnisse in der Theorie des Computing. Wenn dies jemanden anspricht, würde ich diese beiden Bücher vorschlagen: amazon.com/gp/product/0136073476/ref=oss_product und amazon.com/gp/product/0534950973/ref=oss_product
Frédérick Imbeault 26.10.10
Sie wären überrascht, wie weit Sie gehen können, ohne wirklich über diese Dinge Bescheid zu wissen. Viele MUDs haben eine Skriptsprache, die kaum mehr als eine Liste von Anweisungen mit einigen Hacks ist, um Bedingungen zu ermöglichen, und dennoch können sie allein damit viel erreichen.
Kylotan
Kenne ich schon. Viel gelernt über Parsen, Compiler-Design, Bytecode-Maschinen, all das Zeug. Nächstes Mal werde ich wahrscheinlich Lua benutzen und es umso mehr zu schätzen wissen. :)
Kaz Dragon
2

Ich habe versucht, Lua, Python, Schema und Eichhörnchen. Lua hat das Beste herausgefunden; Es hat eine größere Community und bessere Unterstützung als Squirrel und viel bessere Speicher- und Leistungseigenschaften als Python. Schema hat auch sehr gut funktioniert und hat einen sehr kleinen Interpreten, aber es war für Designer schwierig, ihre Köpfe um eine funktionale Sprache zu wickeln.

Crashworks
quelle