Sollte ich Lua für Spielelogik auf Mobilgeräten verwenden?

33

Wie oben wirklich

Ich schreibe in meiner Freizeit ein Android-basiertes Spiel (Android, weil es kostenlos ist und ich keine wirklichen Ambitionen habe, irgendetwas Kommerzielles zu machen).

Die Spielelogik basiert auf einem sehr typischen komponentenbasierten Modell, bei dem Entitäten existieren und mit Komponenten verbunden sind und Nachrichten hin und her gesendet werden, um die Dinge geschehen zu lassen.

Offensichtlich ist die Ebene für die tatsächliche Ausführung dünn, und wenn ich eine iPhone-Version dieser App schreiben würde, müsste ich den Renderer und den Kerntreiber (dieses komponentenbasierten Systems) in Objective C neu schreiben.

Bei den Entitäten handelt es sich lediglich um Einfachdateien, die die Namen der hinzuzufügenden Komponenten festlegen, und die Komponenten selbst sind einfache Einzelzweckobjekte, die die Logik für die Entität enthalten.

Wenn ich nun die gesamte Logik für diese Komponenten in Java schreibe, müsste ich sie in Objective C neu schreiben, wenn ich mich für einen iPhone-Port entscheide. Da der Großteil der Anwendungslogik in diesen Komponenten enthalten ist, würden sie in einer idealen Welt in einer plattformunabhängigen Sprache / Skript / DSL geschrieben, die dann einfach auf einer beliebigen Plattform in die App geladen werden könnte.

Ich bin jedoch zu der Überzeugung gelangt, dass dies keine ideale Welt ist und dass die Lua-Leistung usw. auf Mobilgeräten immer noch nicht auf dem neuesten Stand ist, dass der Overhead zu hoch ist und dass ich später auf Probleme stoßen würde, wenn ich dies tun würde ist diesen Weg gegangen?

Ist das tatsächlich der Fall? Natürlich ist dies nur eine hypothetische Frage. Ich schreibe sie gerne alle in Java, da es einfach und unkompliziert ist, die Dinge in Gang zu bringen, aber ich sage, dass ich es wirklich genieße, dieses Spiel zu machen (unwahrscheinlich, angesichts dessen, wie sehr ich es derzeit nicht mag, etwas zu tun zu haben) mit all den verschiedenen mobilen Geräten) und ich wollte ein kommerziell brauchbares Spiel machen - würde ich Lua verwenden oder würde ich einfach den Hit beim Portieren nehmen und einfach den gesamten Code neu schreiben?

Rob Ashton
quelle

Antworten:

17

In Bezug auf Skriptsprachen ist Lua sehr schnell, aber wie alles andere variiert es je nach Prozessor. Zum Beispiel wäre Lua auf einer Konsolenplattform nicht besonders gut, da es sehr verzweigt ist und einige Konsolenplattformen sehr langsam verzweigen. Um Ihre Frage am besten zu beantworten, würde ich vorschlagen, einige Benchmarks durchzuführen. Sehen Sie, wie schnell Lua verschiedene Algorithmen auf dem Gerät ausführt. Ich vermute, es würde Ihnen gut gehen, solange Sie in Ihrem Skriptcode keine schweren Berechnungen oder Iterationen durchführen. (Das solltest du sowieso nicht tun. Das sind Skripte. Mach Berechnungen in der Engine.)

Das heißt, Scripting ist kein Patentrezept für die Plattformunabhängigkeit. Möglicherweise müssen Sie Obj-C ohnehin neu schreiben, wenn Sie auf das iPhone portieren, da Apple die Ausführung von dynamischem Code einschränkt. Ich habe keinen direkten Link, aber es kann sich lohnen, in diesen zu lesen. Apple lässt verwalteten Code kaum zu (Sie benötigen eine spezielle Berechtigung, um eine spezielle Distribution auszuführen). Sie werden mit Sicherheit keine Lua-Implementierung in den App Store erlauben.

[edit] Anscheinend habe ich mich bei der Sache mit Lua auf dem iPhone geirrt. Schauen Sie sich die Kommentare unten an.

Sean Edwards
quelle
9
Lua wird häufig in iPhone-Anwendungen verwendet, und es wurden Änderungen an den Begriffen vorgenommen, die dies zulassen. Siehe hier: appleoutsider.com/2010/06/10/hello-lua
Colin Gislason
5
Viele Konsolen-Apps verwenden tatsächlich LUA. Ja, es ist verzweigt - aber das spielt keine Rolle, wenn Sie übergeordnete Logik steuern. Nennen Sie es einfach nicht von Ihrer Renderschleife;) Soweit ich weiß, ist LUA für Spiele in Ordnung mit den jüngsten Änderungen an der Entwicklervereinbarung - es gibt viele Spiele, die von LUA gesteuert werden. Wie bei jeder Entwicklung auf einer geschlossenen Plattform sollten Sie jedoch den Plattformbesitzer (z. B. Apple) um endgültige Antworten bitten. Außerdem wird Obj-C nicht benötigt - das iPhone ermöglicht C / C ++ in Ordnung. (Ich empfehle Ihnen jedoch, alles UIKit in Obj-C zu tun. Reduzierter Schmerzfaktor)
Rachel Blum
7
Los, los, magische Seifenkiste. Lua ist ein Substantiv, kein Akronym, du würdest niemals JAVA schreiben. Lua bedeutet Mond. Du würdest nicht MOND schreiben. Danke - der Lau Nazi.
deft_code
2
Leider kenne ich viele Leute, die "JAVA" schreiben.
1
Ich habe Lua auf NDS (das ist weitaus weniger leistungsstark als ein IPhone) verwendet und es hat ziemlich schnell funktioniert. Schnell genug, um mehr als die Hälfte der Logik eines Spiels direkt in lua umzusetzen.
Klaim
7

Die C-Implementierung von Lua wurde speziell für die Ausführung auf eingebetteten Geräten entwickelt. Es ist klein und schnell (für eine Skriptsprache). Ich hätte gedacht, dass es zumindest für leichte Aufgaben in Ordnung ist.

Tenpn
quelle
4

Sicher. Es ist sehr unwahrscheinlich, dass die Skriptlogik Ihr Engpass ist (Sie werden sich tatsächlich mit Shark oder Instruments profilieren, oder?). Ich habe an der iPhone-Version von Marooned gearbeitet, die viel Lua für die Spielelogik verwendete. Ich habe viel Performance-Tuning gemacht und im Grunde war Lua 0%.

(Lua war eine Grauzone, als wir Marooned herausbrachten, aber seitdem ist es offiziell für die iOS-Entwicklung gesegnet.)

David Dunham
quelle
1

Unter http://code.google.com/p/android-scripting/ finden Sie die empfohlene Methode zum Erstellen von Skripten unter Android. Lua passt immer noch nicht sehr gut auf die Android-Plattform, da sie C benötigt. Natürlich könnte man das NDK verwenden, aber das ist kein Wundermittel.

user1800
quelle
1

Es hängt ein wenig davon ab, wie viel Ihrer Spielelogik in Skripten eingebettet ist. Im Allgemeinen wird LUA als hochgradiger Klebstoff verwendet, aber ein Großteil der Grunzarbeit erfolgt über C (++). Ja, LUA ist in Bezug auf Skriptsprachen schnell - Sie sehen immer noch eine Verlangsamung im Vergleich zu Muttersprachen, die etwa 30- bis 50-mal auftritt. Es kommt also wirklich darauf an, wie viel in LUA passiert.

Kaj
quelle
0

Sie können Ihr gesamtes Spiel in Lua schreiben und Java / ObjectiveC / C / C ++ vollständig vermeiden.

Verwenden Sie für die plattformübergreifende Entwicklung Corona . Die Nutzung ist kostenlos, bis Sie den Versand an den App Store oder den Android Marketplace planen.

Wenn Sie das iPhone / Pad / Touch anvisieren möchten, schauen Sie sich Wachs an .

Nur als Randnotiz @Sean Edwards: Ich war an der Auslieferung von fünf Titeln für Nintendo DS, Wii, Sony PSP und Xbox360 beteiligt, die alle dieselbe Engine verwendeten und in Lua geschrieben wurden. Es ist weit verbreitet auf Konsolen und Handys.

bkersten
quelle