Ich habe ein C ++ - Programmierbuch und es enthält einen Lua-Abschnitt. Ich habe angefangen, den Lua-Abschnitt zu lesen, und das hört sich interessant an, aber ich kann die Vor- und Nachteile der Verwendung von Lua in meinem C ++ - Spiel nicht feststellen. Der einzige Vorteil, den ich mir derzeit vorstellen kann, ist, dass Sie einige Codierungsaktualisierungen über Lua vornehmen können, ohne neu kompilieren zu müssen. Ansonsten fällt mir nichts ein. Welche Vor- und Nachteile hat das Hinzufügen von Lua zu einem C ++ - Spiel?
Beispiele wären willkommen.
Antworten:
Reduzieren Sie den Nutzen nicht so leicht. Sie werden nie verstehen, wie produktiv Sie sein werden, bis Sie den Neukompilierungsschritt wegnehmen.
Der "Fluss" ist ein ziemlich gut verstandenes psychologisches Konzept, wenn es um Arbeit geht. Der Flow ist das Gefühl, dass Sie bekommen, wenn Sie sich auf eine Aktivität konzentrieren, wenn Sie Probleme analysieren und lösen, fast ohne nachzudenken, usw. Sie sind am produktivsten, wenn Sie "fließen".
Kompilier mal vermassel das alles. Es ist schwierig, im Fluss zu bleiben, wenn zwischen den Tests sogar eine Kompilierung von 10 Sekunden liegt.
Wenn du das Gameplay entwickelst, hast du normalerweise eine "enge Schleife". Sie haben eine Idee, programmieren einen Test, um festzustellen, ob er funktioniert, und probieren ihn anschließend aus. Wenn es nicht funktioniert, ändern Sie es und versuchen es erneut. Die "Code-to-Test" -Zeit ist für die Aufrechterhaltung des Flusses sehr wichtig. Es ist entscheidend, es so klein wie möglich zu halten.
Mit Lua (oder einer anderen eingebetteten Skriptsprache) können Sie Änderungen testen, nicht nur ohne "Kompilieren", sondern live im Spiel . Abhängig davon, wie Sie Ihr Spiel erstellen, können Sie einen Befehl ausführen, mit dem das Spiel mit neuen Skripten neu gestartet wird, ohne Daten anhalten und neu laden zu müssen. Sie müssen nicht nur nicht neu kompilieren, sondern auch nicht erneut ausführen.
Die Fähigkeit, dies zu tun, kann bei richtiger Motorunterstützung die Produktivität dramatisch steigern.
Ein weiterer großer Vorteil von Skripten ist die Fähigkeit, sich einfach nicht darum zu kümmern. Wenn Sie lange Zeit mit dem Schreiben von C ++ verbracht haben, werden Sie erstaunt sein, wie viel Zeit Sie über minutae verbringen. Wo Speicher gelöscht wird. Wo dies befreit wird. Selbst wenn Sie
shared_ptr
überall verwenden, werden Sie schon durch die Eingabe all dieser Variablentypnamen langsamer.In einer dynamisch getippten Skriptsprache müssen Sie sich nicht darum kümmern. Das Scoping ist einfach. Funktionen sind erstklassige Objekte; Sie müssen Funktoren nicht manuell erstellen. Es ist einfach so einfach , einige Dinge zu tun.
Nun, das hat auch Nachteile, wenn Sie kein disziplinierter Programmierer sind. Es ist sehr einfach, Globals in Lua zu verwenden (obwohl es Möglichkeiten gibt, dies zu verhindern). Nicht fürsorglich bedeutet, dass Sie beim Codieren sehr schlampig sein können.
Aber dann wieder, kann Vorteile haben sehr nachlässig zu sein .
Ein weiterer Vorteil von Lua ist, dass es eine nette Datenbeschreibungssprache macht. Ähnlich wie JSON nur eine JavaScript-Datei ist, die ein Array / eine Tabelle erstellt und zurückgibt, können Sie Lua-Skripte erstellen, die Tabellen zurückgeben.
Dies ist nützlich für Konfigurationsdateien. Das Tabellenformat von Lua ist viel besser als das von .ini. Das Format ist immer noch recht übersichtlich, kompakt und erweiterbar.
Oh, und es ist immer noch ein Lua-Skript, damit es die eigentliche Logik ausführen kann. Der Nachteil dabei ist , dass es sich um ein Lua-Skript handelt, mit dem die eigentliche Logik ausgeführt werden kann . Das könnte im Spiel katastrophal sein, da der Benutzer möglicherweise anfangen könnte, Dinge zu vermasseln.
Tatsächlich ist dies jedoch leicht zu handhaben. Lua ist für die Einbettung konzipiert, was bedeutet, dass die Isolierung eigentlich recht einfach ist. In der Tat liefert ein neuer Lua-Staat standardmäßig nichts . Sie müssen tatsächlich etwas tun, um auch die grundlegendsten Lua-Standardbibliotheken verfügbar zu machen. Der Dateizugriff, der Spielstatuszugriff usw. sind alles Opt-in-Optionen, keine Opt-out-Optionen. Und jeder Lua-Staat ist voneinander getrennt. Der Lua-Status, den Sie für AI-Skripte verwenden, muss nicht der Lua-Status sein, den Sie für Konfigurationsdateien verwenden.
Ich habe tatsächlich einen Code, mit dem Sie viele Lua-Standardbibliotheken registrieren können, der jedoch alle Datei-E / A-Vorgänge durchläuft und entfernt. Das Schlimmste, was eine Lua-Skript-basierte Konfigurationsdatei anrichten kann, ist, dass Ihr Spiel sofort abstürzt, wenn es ausgeführt wird. Und da Sie diese Konfigurationsdateien nicht manuell freigeben, wäre das für einen Hacker kein großer Spaß.
Ich würde sagen, dass der größte Nachteil jeder Skriptsprache das Debuggen ist. Die meisten Skriptsprachen haben keine Debugger und Lua ist nicht anders. Lua verfügt über alle Tools, die zum Erstellen von Debugging-Tools erforderlich sind. Es ist jedoch kein Debugger eingebaut. Sie müssen eine zusammenstellen. Und das wird ein angemessenes Maß an Arbeit erfordern.
Oder du kannst mit "printf debugging" fällig machen. Es hängt wirklich davon ab, wie viel Lua-Code Sie schreiben.
quelle
Wo ich arbeite:
Vorteile:
luac -l
und einen Blick auf den Bytecode zu werfen, um eine Analyse durchzuführen. Es ist auch ziemlich einfach, die meisten Lua-Quelldateien zu analysieren, besonders wenn Sie eine Kodierungskonvention haben. Wir können lokale Konventionen durchsetzen. Sie können auch in Metalua nach noch mehr Power suchen .lua_pcall
.Nachteile:
step
sollten, ändert sich drastisch pro Spiel. Einige funktionieren besser mit vollem GC für jeden Frame (kleines Arbeitsset). Einige arbeiten mit viel kleineren Pässen seltener besser. Beachten Sie, dass es eine Menge Arbeit gibt, die GC auf neueren Lua-Versionen und in einigen Patches zu verbessern (für die Sie sich nicht scheuen sollten, sie zu verwenden!).lua_State
in einigen Fällen komplett weg . Und wir haben immer noch manchmal Probleme. Das Optimieren der Größe der kleinen Objektpools (der Einfachheit halber und mit geringerem Overhead) und der Größe des lua-spezifischen großen Objekthaufens kann problematisch sein. Auf Systemen mit mehr als 4 MB haben wir uns jedoch noch nicht mit den spezialisierten Heaps und Pools befasst.__index
und__newindex
). Es ist besser, wenn Sie Fehler beim Kompilieren abfangen können. Es gibt verschiedene Dinge, die Sie tun können, um dies zu lindern.Lua ist sehr zu empfehlen, sei einfach bereit, ein bisschen damit zu arbeiten! Vielleicht möchten Sie auch Eichhörnchen ausprobieren, obwohl ich glaube, dass es eine kleinere Nutzerbasis hat.
quelle
Eigentlich gibt es 3 große Vorteile:
Mit diesen Faktoren können Sie als Spieleentwickler Funktionen aktivieren, die die Entwicklung beschleunigen und die Qualität Ihres Spiels verbessern.
Beispielsweise:
quelle
Aus meiner Erfahrung ein bisschen runtergekocht.
Vorteile
Nachteile
Endgültiges, persönliches Urteil: Wenn Sie ein Spiel mit anständiger Größe erstellen und noch keine Skriptsprache haben, dann holen Sie sich Lua. Es wird sich lohnen.
quelle
Garry's Mod ist ein Beispiel für ein Spiel, das Lua und C ++ verwendet. Sie benutzen Lua für alle Mods, was es für die Leute viel einfacher macht, sie zu machen. C ++ wird für alle Interna verwendet. Der einzige Nachteil, den ich mir vorstellen kann, ist die Tatsache, dass Lua nicht so schnell ist wie C ++.
quelle