Welche Skriptsprache soll ich für mein Spiel auswählen? [geschlossen]

53

In welchen Fällen sind welche Skriptsprachen besser als andere?

Alle Antworten sind erwünscht. Bitte geben Sie eine Beschreibung und beschreiben Sie, in welchen Fällen sich die Sprache auszeichnet.

(Denken Sie daran, eine Sprache pro Antwort)

Linus Sjögren
quelle

Antworten:

39

Lua ist in der Spielebranche weit verbreitet . Von unabhängigen Spielen ( Aquaria ) bis zu AAA-Titeln (Civilization).

Der Hauptgrund? Ich würde sagen, weil es leicht zu erlernen und in Ihre Spiele zu integrieren ist. Aber das Gleiche könnte man mit Python sagen, da bin ich mir sicher. Das Schreiben von Skripten ist im Allgemeinen nicht schwierig. Ich denke, der wahre Grund, warum Sie sich für Lua entscheiden sollten, ist, dass es erwiesenermaßen viel mehr Ressourcen gibt, von denen Sie lernen können. Wenn Sie Lust haben, mit etwas zu experimentieren, das nicht der Norm entspricht, würde ich anfangen, mit einer anderen Sprache zu experimentieren.

David McGraw
quelle
8
Lua ist sehr beliebt, weil es "Metasprachen" -Funktionen bietet. Sie können objektorientierte Strukturen oder reine prozedurale Funktionen usw. implementieren. Es verfügt über eine sehr einfache C-Schnittstelle und bietet dem Engine-Entwickler viel Flexibilität in der Sprache.
Karantza
3
Ich bin nicht überzeugt, dass Python eine gute Wahl treffen würde. Die C-Bindungen für Python sind viel mehr darauf ausgerichtet, Python mit C zu erweitern und dann Python in C
einzubetten
5
Soweit ich gehört habe, hat Ĺua im Vergleich zu anderen Skriptsprachen wie Python auch eine gute Laufzeitleistung. (und es hat volle Unterstützung für Schließungen - eine wirklich nette Funktion, wenn Sie mich fragen ..)
thbusch
2
Civilization IV verwendet Python ...
Emiliano
2
@happy_emi In der Tat, während Civ V Lua benutzt
Tobias Kienzler
22

Eichhörnchen

Eichhörnchen hat eine interessante Geschichte. Es wurde gebaut, nachdem ein Spielarchitekt Probleme mit Luas unvorhersehbarer Müllabfuhr hatte, und verrückt, dass alles null ist, auch wenn es nicht existiert .

Eichhörnchen ist die in Left 4 Dead 2 verwendete Skriptsprache . Die API ist sehr luaartig (Squirrels Autor liebt Luas Design ).

Eichhörnchen ist also eine großartige Sprache, da es eine Art Lua der zweiten Generation ist. Es hat die guten Ideen genommen und die nervigen Exzentrizitäten beseitigt.

Gleiche von Lua:

  • Coroutinen
  • Tabellen und Metatables
  • dynamisch getippt
  • viel mehr

Neu bei Squirrel:

  • Klassen
  • Arrays
  • reguläre Ausdrücke anstelle von Luas Übereinstimmungssyntax.
  • Sprache im C / C ++ / Java / C # -Stil anstelle des Pascal / Delphi-Stils.
  • viel mehr

Der Hauptnachteil von Eichhörnchen ist, dass es nicht Lua ist. Lua ist viel weiter verbreitet. Aber wenn das kein Problem ist, ist Eichhörnchen ein einfacher Gewinn. Die Popularität der Sprache ist jedoch oftmals ein nützliches Merkmal für sich, weshalb die Entscheidung nicht so eindeutig ist.

deft_code
quelle
9

V8 Javascript von Google.

PRO's:

Ganz einfach zu bedienen

Ständig besser werden

Leistungsstark und flexibel

Sonstiges Wie bereits erwähnt, ist Javascript ein weit verbreitetes Programmierwerkzeug. Durch das Hinzufügen zu meinen Spielen haben sich weit mehr Menschen als in anderen Sprachen dazu in der Lage gefühlt. Es unterstützt auch eine große Menge an Casting und Konvertierung, um Arbeit für den Programmierer zu sparen, macht es auch wirklich benutzerfreundlich und funktioniert gut mit STL.

Mögliche CON's:

Dokumentation kann verwirrend sein Es ist wirklich nicht das Beste.

Beispiele Oft ein Netz der Verrücktheit. Da es keine solide Einfachheit gibt, wirkt es viel höher als es ist.

Vorlagen Manchmal werden diese gehasst oder vermieden.

SDK-Codebasisgröße Die generierte Codegröße kann als aufgebläht angesehen werden.

FuzzYspo0N
quelle
Ein Nachteil für mich war die Größe. Wenn Sie ein einfaches / Gelegenheitsspiel erstellen, ist die v8-Engine ziemlich groß und kann sogar um ein Vielfaches größer sein als Ihr gesamtes Spiel.
Zack The Human
Stimmt, aber als eigenständige .lib-Datei ist das ein großes Problem? Es wird einfach neben Ihrem SDL oder Ihrer Lua eingefügt. Wenn Sie generierte Codegröße gemeint haben, habe ich nicht getestet, wie groß es ist, aber das ist kein schlechter Punkt.
Underscorediscovery
Ich meinte die generierte Codegröße. Ich nehme an, es ist nicht so groß, wenn man bedenkt, wie groß die meisten Spiele heute sind.
Zack The Human
1
Getestet, Default shell.cc mit aktuellen SVN-Uhren bei 1.441 MB bit.ly/9DNn8J . Dies scheint zwar ziemlich anstrengend zu sein, aber die meisten Bibliotheken, die für andere Aufgaben benötigt werden (Netzwerke, Grafiken), werden dies ebenso dramatisch ergänzen. Ein Nebenprojekt von mir mit v8, phoenixGL, ENet, einer Menge Boost und viel mehr Code in der Lösung (wie Komprimierung, Verschlüsselung, GUI-Bibliotheken, Awesomium) erreicht im Visual Studio 2008 eine Größe von 2,5 MB. release "Gewichte einbauen bei 861 KB. Für mich ist das gar nicht so schlecht. Auf bestimmten Plattformen konnte ich sehen, dass es lästig war - allerdings nicht für die meisten :)
underscorediscovery
1
Ich habe V8 einige Male zuvor in meinen Projekten verwendet. IMO Javascript ist die ideale Sprache für das Scripten von Spielen. Die ereignisbasierte Natur und prototypbasierte Objekte machen alles so einfach. :)
Stephen Belanger
7

Das hängt vom Spiel und seiner Zielplattform ab.

Ein Spiel mit 100 Nicht-Spieler-Charakteren (RTS-Spiele) hat andere Anforderungen als ein Spiel mit nur 2 Charakteren (Street Fighter). Ein Spiel, das auf einem PC ausgeführt wird, hat andere Anforderungen als ein Spiel, das auf einer Konsole ausgeführt wird.

Lua ist beliebt

GameMonkey wird von mehreren Teams verwendet. Es ist schneller als Lua und fädelt besser.

Python wurde in mehreren Spielen verwendet.

JavaScript ist eine mögliche Option, da Sie JavaScript-Engines herunterladen können. Es gibt mehr JavaScript-Programmierer als jeder andere Programmierertyp.

Es gibt auch spezialisierte Sprachen.

SCUMM wurde in verschiedenen Abenteuerspielen verwendet und ist besonders für diese Spiele geeignet.

gman
quelle
Javascript ist eine wirklich gute Idee. Ich frage mich, warum es in diesem Raum keine Traktion zu haben scheint. Irgendwelche Ideen?
Flewis
JavaScript hat Traktion. Die Einheit nutzt es. Wolfire Games auch für ihren Motor.
AA Grapsas
Zwei Motoren machen wirklich keine Traktion. Ich vermute, der Grund, warum es nur eine jüngste Entwicklung ist, ist, dass es vor Mono und V8 nicht viele gute JavaScript-Interpreter gab. SpiderMonkey ist nicht genau das, wonach Sie suchen und sagen: "Ja, ich möchte, dass mein Spiel so schnell und schlank und stabil ist!"
4

Der Vollständigkeit halber ist eine weitere Option Monoskript , mit der Sie die Novell-Implementierung des .NET-Frameworks für die Skripterstellung verwenden können. Es ist das, was Unity benutzt. Hier ist eine weitere Seite zum Einbetten von Mono in Ihre Anwendung.

Das Mono-Framework ist schneller als die meisten Skriptsprachen (vielleicht sogar alle?), Da es nicht interpretiert wird. Da sich zwischen dem Compiler und dem Befehlssatz eine Ebene befindet, können Sie verschiedene Sprachen programmieren, darunter C # und Dialekte von Python, Lua und Javascript.

Ich bin mir jedoch nicht sicher, ob es auf allen Plattformen kostenlos ist.

Sander van Rossen
quelle
4
Beachten Sie, dass bei der Konsolenentwicklung JIT-Code anscheinend nicht in Frage kommt, da Sie Datenseiten nicht als ausführbar markieren können. Die IL muss auf die Zielplattform vorkompiliert werden.
Jeff
3
Das JIT-Problem gilt auch für iOS. Auch für Mono gelten Lizenzbeschränkungen. Sie benötigen eine kommerzielle Lizenz, wenn Sie diese in einer Umgebung verwenden möchten, in der der Endbenutzer die Mono-Laufzeit nicht aktualisieren darf / kann.
Sam
4

Ich persönlich fand AngelScript (siehe Link unten) viel einfacher an C ++ zu binden als Lua, als ich eine Skriptsprache für mein eigenes Projekt auswählte. (Ich habe tatsächlich eine kleine Wrapper-Bibliothek dafür geschrieben, um die Verwendung zu vereinfachen, und zwar auf Kosten einiger Flexibilität.)

http://www.angelcode.com/angelscript/

Trotzdem vermute ich, dass Lua einige Vorteile hat, die es für kommerzielle Spieleentwickler attraktiv machen:

(a) Es ist ausgereifter und verbreiteter als AngelScript

(b) Die Syntax ist für Nicht-Programmierer einfacher (AngelScript ist sehr C ++ -artig)

(c) Es hat einen kleineren Platzbedarf als AngelScript (zumindest soweit ich mich erinnere)

Wenn Sie jedoch nur ein Hobbyprojekt schreiben, würde ich sagen, dass AngelScript zumindest einen Blick wert ist.

Stuart Golodetz
quelle
2

Sie sollten eine Skriptsprache wählen, die stabile und gut unterstützte Bindungen zur primären Entwicklungssprache Ihres Spiels aufweist. Wenn Sie Ihr Spiel in C oder C ++ schreiben, stehen für Python und Lua ziemlich solide Bindungen zur Verfügung. Wenn Sie Ihr Spiel für die .NET-Plattform schreiben (mit C # oder einer anderen Sprache), empfehle ich die Verwendung von IronPython oder IronRuby. Beide sind vollständige Sprachimplementierungen, die die Dynamic Language Runtime (DLR) von Microsoft nutzen, die eine hervorragende Leistung und eine sehr enge Integration mit .NET Framework bietet. Die Interoperabilität zwischen C # und IronPython / IronRuby ist heutzutage ziemlich reibungslos, insbesondere mit der Einführung der dynamischen Bindung von Call-Sites in C # 4.0.

Mike Strobel
quelle
2

Planen

Nun, speziell schlau .

Mit guile können Sie Ihre eigene DSL (Domain Specific Language) nur für Ihr Spiel haben. Sobald Sie sich an die Klammern und die Präfixnotation gewöhnt haben, ist das Schema der Himmel, mit dem Sie arbeiten können.

Wenn Sie in einem ernsthaften Spiel mit Guile spielen wollen, würde ich ein paar Monate warten, bis das 2.0-Release IIRC, einen Ecmascript-Interpreter sowie das aktuelle Schema enthält. Sie können auch große Geschwindigkeitsverbesserungen erwarten.

Joe D
quelle
1

Dies hängt davon ab, wofür Sie es tatsächlich benötigen. Wie David betont, ist Lua sehr beliebt, obwohl mir ein Spieleentwickler mitteilte, dass er sich nicht ganz sicher war, warum. Ich denke, seine Leichtigkeit ist ein häufiger Grund, aber an diesem Punkt würde ich erwarten, dass viele Leute Lua benutzen, weil dies de facto zum Standard geworden ist. Es scheint am besten für sehr leichte Modifikationen.

Für einen umfassenderen Ansatz würde ich sagen, dass Python die richtige Wahl ist. Civ IV benutzte es, um eine anständige Wirkung zu erzielen.

Flewis
quelle
0

Die Auswahl einer Skriptsprache über eine andere hängt von Ihren spezifischen Anforderungen ab.

Einige der Optionen, zwischen denen Sie wählen müssen, könnten sein:

Geschwindigkeit des Interpreters - Wenn die Scripting-Funktion ausschließlich von Entwicklern verwendet wird, um statisches Verhalten zu skripten, sind Geschwindigkeit und eine vollwertige und erweiterbare API möglicherweise der wichtigste Aspekt. Ich habe dort einige gute Erfahrungen mit LUA gemacht.

Leicht zu erlernen, Zugänglichkeit - für einen Content- / Leveldesigner kann es schwierig sein, komplexere Skriptsprachen (abhängig vom Hintergrund) zu lernen, um dynamisches Verhalten zu erzeugen. In diesem Fall könnte die Verwendung von leicht zu erlernenden (dh häufig verwendeten) und gut dokumentierten Sprachen hier angemessener sein. JavaScript oder Python könnten hier eine gute Lösung sein.

Workflow-Integration - Wenn Sie eine bestimmte Produktionspipeline mit bereits vorhandenen Tools haben, kann es eine schlechte Idee sein, eine Sprache zu verwenden, die für einen bestimmten Fall am besten zu funktionieren scheint, wenn die anderen Tools mit einem völlig anderen Tool arbeiten. Dies gilt insbesondere dann, wenn mehrere Programmierer an den verschiedenen Tools arbeiten. In diesem Fall könnte es effizienter sein, die "nicht ganz passende" Sprache zu verwenden.

Blackbone
quelle
0

Wenn Sie an einem Titel für Windows arbeiten und verwalteten Code schreiben, der auf der Common Language Runtime (CLR) ausgeführt wird, z. B. in C #, sollten Sie (Iron) Python als Skriptsprache integrieren.

Nach meiner Erfahrung ist Python für Nicht-Programmierer / Designer sehr einfach zu unterrichten. Es ist für Entwickler noch einfacher zu erlernen, da es im Wesentlichen wie Pseudocode liest. Dynamisch getippt zu werden ist nur einer der Aspekte, die dazu beitragen, dass Menschen mit wenig oder ohne Vorkenntnisse in der Programmierung schnell mit der Sprache arbeiten können.

Die CLR- und Sprachteams von Microsoft (Anders Hejlsberg, Eric Lippert, Mads Torgersen, Jim Hugunin und andere) sind nicht nur einfach zu erlernen und leistungsstark, sondern haben auch großartige Arbeit geleistet, um Compiler- und Laufzeitfunktionen über das neue Dynamic verfügbar zu machen Die Language Runtime (DLR) in .NET 4 macht die Interoperabilität zwischen statisch und dynamisch eingegebenem Code wesentlich einfacher. Nach dem, was ich bisher gesehen und ausprobiert habe, ist der Code auf ein Minimum reduziert. Dadurch bleibt Ihre Codebasis sauber und wartbar.

Sie können dies nutzen, um die Reibung zwischen den Skriptteilen Ihres Spiels und der Engine sehr gering zu halten. Wenn beide in derselben VM ausgeführt werden, kann die Laufzeit auch den Code während der Ausführung optimieren.

Codesurgeon
quelle
0

Die Antwort hängt stark von Ihrer Umgebung ab. Ich arbeite derzeit mit Unity, daher verwende ich eine Mono-basierte Sprache (in meinem Fall C #, aber Javascript und Boo sind auch Optionen). Die Antwort hängt ganz von Ihren spezifischen Umständen ab.

user266
quelle
-2

ActionScript ist eine dynamische / statische Hybridsprache, mit der Flash-Spiele erstellt werden, die im Web weit verbreitet werden können. Es wird von Bibliotheken wie Flixel, FlashPunk und Box2d ziemlich gut unterstützt.

Iain
quelle
-2

Wenn Sie ein bestehendes Team haben, das die Skriptsprache verwendet, oder einen leitenden (Level-) Designer, der die Skriptsprache verwendet, entscheiden Sie sich für eine Sprache Ihrer Wahl. Sie werden ihre Zeit damit verbringen, also sollten sie versorgt werden.

[Salzkorn] Wenn Sie niemanden haben oder langfristig planen, dann rollen Sie Ihren eigenen . Ja, das Schreiben eines Compilers und / oder Interpreters für eine Skriptsprache kann ein oder zwei Wochen dauern, aber auf lange Sicht lohnt sich die Flexibilität um ein Vielfaches. Geh einfach nicht zu weit in die Irre und erfinde den Brainfuck neu. [/Salzkorn]

Andreas
quelle
Ich würde in ein oder zwei Tagen einen Interpreter oder Jit-Compiler für etw wie lisp / scheme oder bash oder python oder lua oder erlang (irgendetwas ohne seine Standard-Bibliotheken) in haskell schreiben. Ich würde nicht vorschlagen, einen Interpreter in zB C ++ oder Java zu schreiben, solange er nicht für die Interpretation von etw lisp wie gedacht ist. Aber das war sowieso nicht die Frage.
Comonad
Ich denke, die Frage war mehr auf die Vor- und Nachteile von Skriptsprachen ausgerichtet, nicht wirklich darauf, wie man sich für eine entscheidet. Immer noch hilfreich, nehme ich an.
Michael Coleman