¿Debo usar Lua para la lógica del juego en dispositivos móviles?

33

Como arriba realmente,

Estoy escribiendo un juego basado en Android en mi tiempo libre (Android porque es gratis y no tengo aspiraciones reales de hacer nada comercial).

La lógica del juego proviene de un modelo basado en componentes muy típico por el cual las entidades existen y tienen componentes unidos a ellas y se envían mensajes de un lado a otro para que las cosas sucedan.

Obviamente, la capa para el rendimiento real es delgada, y si tuviera que escribir una versión para iPhone de esta aplicación, tendría que volver a escribir el renderizador y el controlador central (de este sistema basado en componentes) en el Objetivo C.

Las entidades son solo archivos planos que determinan los nombres de los componentes que se agregarán, y los componentes en sí mismos son objetos simples de un solo propósito que contienen la lógica de la entidad.

Ahora, si escribo toda la lógica para esos componentes en Java, entonces tendría que volver a escribirlos en el Objetivo C si decidiera hacer un puerto para iPhone. Como la mayor parte de la lógica de la aplicación está contenida dentro de estos componentes, en un mundo ideal, se escribirían en un lenguaje / script / DSL independiente de la plataforma que luego podría cargarse en la aplicación en cualquier plataforma.

Sin embargo, me han hecho creer que este no es un mundo ideal, y que el rendimiento de Lua, etc. en dispositivos móviles todavía no está a la altura, que la sobrecarga es demasiado y que me vería en problemas más tarde si fue por esa ruta?

¿Es este realmente el caso? Obviamente, esta es solo una pregunta hipotética, estoy feliz de escribirlos todos en Java, ya que es simple y fácil despegar, pero digamos que realmente disfruto haciendo este juego (poco probable, dado lo mucho que no me gusta tener que lidiar actualmente) con todos esos dispositivos móviles diferentes) y quería hacer un juego comercialmente viable: ¿usaría Lua o simplemente recibiría el golpe cuando se trata de portar y volver a escribir todo el código?

Rob Ashton
fuente

Respuestas:

17

En cuanto a los lenguajes de secuencias de comandos, Lua es muy rápido, pero, como todo, varía según el procesador. Por ejemplo, Lua no sería excelente en una plataforma de consola porque tiende a ser muy ramificada, y algunas plataformas de consola se ramifican muy lentamente. Para responder mejor a su pregunta, sugeriría ejecutar algunos puntos de referencia. Vea qué tan rápido Lua realiza algunos algoritmos diferentes en el dispositivo. Sospecho que estarías bien siempre y cuando no estés haciendo ninguna matemática o iteración en tu código de script. (No deberías estar haciendo eso de todos modos. Son guiones. Haz cálculos en el motor).

Dicho esto, las secuencias de comandos no son una bala de plata para la independencia de la plataforma. Es posible que deba volver a escribir en Obj-C de todos modos si realiza la transferencia al iPhone debido a las restricciones de Apple para ejecutar código dinámico. No tengo un enlace de antemano, pero puede valer la pena leerlo. Apple apenas permite el código administrado (debe obtener un permiso especial para ejecutar una distribución especial). Ciertamente, no permitirán una implementación de Lua en la tienda de aplicaciones.

[editar] Aparentemente me equivoqué sobre la cosa de Lua en iPhone. Echa un vistazo a los comentarios a continuación.

Sean Edwards
fuente
99
Lua es ampliamente utilizado en aplicaciones de iPhone, y se hicieron cambios en los términos que lo permiten. Ver aquí: appleoutsider.com/2010/06/10/hello-lua
Colin Gislason
55
Muchas aplicaciones de consola en realidad usan LUA. Sí, es ramificado, pero eso no importa si controlas la lógica de alto nivel. Simplemente no lo llame desde su bucle de renderizado;) Hasta donde yo sé, LUA para juegos está bien con los cambios recientes en el acuerdo de desarrollador: hay muchos juegos impulsados ​​por LUA. Pero como con cualquier desarrollo en una plataforma cerrada, solicite respuestas definitivas al propietario de la plataforma (es decir, Apple). Además, no hay necesidad de Obj-C: el iPhone permite que C / C ++ esté bien. (Sin embargo, te recomiendo que hagas cualquier cosa UIKit en Obj-C. Factor de dolor reducido)
Rachel Blum
77
Ve, ve a la caja de jabón mágico. Lua es un sustantivo, no un acrónimo, nunca escribirías JAVA. Lua significa luna. No escribirías MOON. gracias, el Lau Nazi.
deft_code
2
Lamentablemente, conozco a muchas personas que escriben "JAVA".
1
Utilicé lua en gran medida en NDS (que es mucho menos potente que un iPhone) y funcionó bastante rápido. Lo suficientemente rápido como para hacer más de la mitad de la lógica de un juego directamente en lua.
Klaim
7

La implementación de C de Lua está específicamente diseñada para ejecutarse en dispositivos integrados. Es pequeño y rápido (para un lenguaje de script). Hubiera pensado que estaba bien para al menos tareas ligeras.

tenpn
fuente
4

Seguro. La lógica de secuencias de comandos es muy poco probable que sea su cuello de botella (en realidad se perfila con Shark o Instruments, ¿verdad?). Trabajé en la versión para iPhone de Marooned, que usaba mucho Lua para la lógica del juego. Hice mucho ajuste de rendimiento, y básicamente Lua fue 0%.

(Lua era un área gris cuando lanzamos Marooned, pero desde entonces ha sido bendecida oficialmente para el desarrollo de iOS).

David Dunham
fuente
1

Consulte http://code.google.com/p/android-scripting/ para conocer la forma recomendada de realizar scripts en Android. Lua todavía no encaja muy bien en la plataforma Android, ya que requiere C. Por supuesto, podría usar el NDK, pero eso no es una bala de plata.

usuario1800
fuente
1

Depende un poco de qué parte de la lógica de tu juego esté integrada en los scripts. En general, LUA se usa como pegamento de alto nivel, pero gran parte del trabajo duro ocurre a través de C (++). Sí, LUA es rápido en lo que respecta a los lenguajes de secuencias de comandos: aún observa una desaceleración en comparación con los idiomas nativos de aproximadamente 30 a 50 veces, por lo que realmente depende de cuánto esté sucediendo en LUA.

Kaj
fuente
0

En realidad, puedes escribir todo tu juego en Lua y evitar Java / ObjectiveC / C / C ++ por completo.

Para el desarrollo multiplataforma, utilice Corona . Es de uso gratuito hasta que planee enviar a App Store o Android Marketplace.

Si desea apuntar al iPhone / Pad / Touch, eche un vistazo a la cera .

Solo como una nota al margen @Sean Edwards: He estado involucrado en el envío de cinco títulos dirigidos a Nintendo DS, Wii, Sony PSP y Xbox360, todos los cuales usaron el mismo motor y fueron escritos en Lua. Es ampliamente utilizado en consolas y móviles.

Bkersten
fuente