Dovrei usare Lua per la logica di gioco sui dispositivi mobili?


33

Come sopra davvero,

Sto scrivendo un gioco basato su Android nel mio tempo libero (Android perché è gratuito e non ho vere aspirazioni a fare qualcosa di commerciale).

La logica di gioco deriva da un modello basato su componenti molto tipico in base al quale esistono entità con componenti collegati e messaggi inviati avanti e indietro per far accadere le cose.

Ovviamente il livello per l'esecuzione effettiva è sottile, e se dovessi scrivere una versione per iPhone di questa app, dovrei riscrivere il renderer e il driver principale (di questo sistema basato su componenti) in Obiettivo C.

Le entità sono solo file flat che determinano i nomi dei componenti da aggiungere, e i componenti stessi sono semplici oggetti monouso contenenti la logica per l'entità.

Ora, se scrivo tutta la logica per quei componenti in Java, allora dovrei riscriverli su Objective C se decido di fare una porta per iPhone. Dato che la maggior parte della logica dell'applicazione è contenuta all'interno di questi componenti, in un mondo ideale verrebbero scritti in un linguaggio / script / DSL indipendente dalla piattaforma che potrebbe quindi essere semplicemente caricato nell'app su qualsiasi piattaforma.

Sono stato indotto a credere, tuttavia, che questo non è un mondo ideale, e che le prestazioni di Lua ecc. Sui dispositivi mobili non sono ancora all'altezza, che l'overhead è eccessivo e che incontrerei problemi in seguito se hai seguito quella strada?

È davvero così? Ovviamente questa è solo una domanda ipotetica, sono felice di scriverli tutti in Java in quanto è semplice e facile far decollare le cose, ma dire che in realtà mi diverto a fare questo gioco (improbabile, dato quanto non mi piace attualmente dover affrontare con tutti quei diversi dispositivi mobili) e volevo realizzare un gioco commercialmente praticabile - avrei usato Lua o avrei semplicemente preso il colpo quando si trattava di porting e riscrivevo tutto il codice?

Risposte:


17

Per quanto riguarda i linguaggi di scripting, Lua è molto veloce, ma come qualsiasi cosa varia a seconda del processore. Ad esempio, Lua non sarebbe eccezionale su una piattaforma console perché tende ad essere molto ramificata e alcune piattaforme console si diramano molto lentamente. Per rispondere al meglio alla tua domanda, suggerirei di eseguire alcuni benchmark. Scopri quanto velocemente Lua esegue alcuni vari algoritmi sul dispositivo. Ho il sospetto che staresti bene fintanto che non stai facendo alcuna matematica pesante o iterazione nel tuo codice di script. (Non dovresti farlo comunque. Sono script. Fai calcoli nel motore.)

Detto questo, lo scripting non è un proiettile d'argento per l'indipendenza della piattaforma. Potrebbe essere necessario riscrivere in Obj-C comunque se effettui il port su iPhone a causa delle restrizioni di Apple sull'esecuzione del codice dinamico. Non ho un link con la mano, ma potrebbe valere la pena di leggerlo. Apple consente a malapena il codice gestito (è necessario ottenere un'autorizzazione speciale per eseguire una distribuzione speciale). Certamente non consentiranno un'implementazione di Lua nell'app store.

[modifica] Apparentemente mi sono sbagliato sulla cosa di Lua su iPhone. Dai un'occhiata ai commenti qui sotto.


9
Lua è ampiamente utilizzato nelle applicazioni iPhone e sono state apportate modifiche ai termini che lo consentono. Vedi qui: appleoutsider.com/2010/06/10/hello-lua
Colin Gislason

5
Molte app per console utilizzano effettivamente LUA. Sì, è ramoso, ma non importa se controlli la logica di alto livello. Basta non chiamarlo dal tuo ciclo di rendering;) Per quanto ne so, LUA per i giochi va bene con le recenti modifiche al contratto di sviluppo - ci sono molti giochi che sono guidati da LUA. Ma come per qualsiasi sviluppo su una piattaforma chiusa, chiedi al proprietario della piattaforma (ovvero Apple) risposte definitive. Inoltre, non è necessario Obj-C: l'iPhone consente C / C ++ bene. (Ti consiglio di fare qualsiasi cosa UIKit in Obj-C, però. Fattore di dolore ridotto)
Rachel Blum

7
Vai vai scatola di sapone magico. Lua è un sostantivo non un acronimo, non scriveresti mai JAVA. Lua significa luna. Non scriveresti MOON. grazie - il Lau nazista.
deft_code

2
Purtroppo conosco molte persone che scrivono "JAVA".

1
Ho usato lua pesantemente su NDS (che è molto meno potente di un iPhone) e ha funzionato abbastanza velocemente. Abbastanza veloce per farci più della metà della logica di un gioco direttamente in lua.
Klaim,

7

L'implementazione C di Lua è progettata specificamente per essere eseguita su dispositivi integrati. È piccolo e veloce (per un linguaggio di scripting). Avrei pensato che andasse bene per compiti almeno leggeri.


4

Sicuro. È improbabile che la logica degli script sia il tuo collo di bottiglia (in realtà eseguirai il profilo con Shark o Instruments, giusto?). Ho lavorato sulla versione per iPhone di Marooned, che utilizzava molta Lua per la logica di gioco. Ho fatto molto tuning delle prestazioni, e sostanzialmente Lua era dello 0%.

(Lua era una zona grigia quando abbiamo rilasciato Marooned, ma da allora è stata ufficialmente benedetta per lo sviluppo di iOS.)


1

Consulta http://code.google.com/p/android-scripting/ per il modo consigliato di eseguire script su Android. Lua non si adatta ancora molto bene alla piattaforma Android, poiché richiede C. Naturalmente, potresti usare l'NDK, ma questo non è un proiettile d'argento.


1

Lo fa dipenderà un po ' quanta della vostra logica del gioco è incorporato negli script. In generale LUA viene utilizzato come colla di alto livello, ma gran parte del lavoro grugnito avviene attraverso C (++). Sì, LUA è veloce per quanto riguarda i linguaggi di scripting: stai ancora osservando un rallentamento rispetto alle lingue native di circa 30-50 volte, quindi dipende davvero da quanto sta accadendo in LUA.


0

Puoi effettivamente scrivere l'intero gioco in Lua ed evitare del tutto Java / ObjectiveC / C / C ++.

Per lo sviluppo multipiattaforma utilizzare Corona . È gratuito fino a quando non prevedi di effettuare la spedizione su App Store o Android Marketplace.

Se vuoi scegliere come target l'iPhone / il pad / touch, dai un'occhiata a wax .

Proprio come una nota a margine @Sean Edwards: sono stato coinvolto nella spedizione di cinque titoli destinati a Nintendo DS, Wii, Sony PSP e Xbox360, che utilizzavano tutti lo stesso motore e sono stati copiati in Lua. È ampiamente usato su console e cellulari.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.