Devrais-je utiliser Lua pour la logique de jeu sur les appareils mobiles?

33

Comme ci-dessus vraiment,

J'écris un jeu basé sur Android pendant mon temps libre (android parce que c'est gratuit et que je n'ai aucune aspiration réelle à faire de la publicité).

La logique de jeu découle d'un modèle très typique basé sur des composants, dans lequel des entités sont associées à des composants et des messages sont envoyés pour faire avancer les choses.

Il est évident que la couche utilisée pour effectuer cette tâche est mince et que si je devais écrire une version iPhone de cette application, je devrais réécrire le moteur de rendu et le pilote principal (du système à base de ce composant) dans Objective C.

Les entités ne sont que des fichiers plats déterminant les noms des composants à ajouter, et les composants eux-mêmes sont de simples objets à usage unique contenant la logique de l'entité.

Maintenant, si j'écris toute la logique de ces composants en Java, je devrais les réécrire sur Objective C si je décidais de faire un port iPhone. Comme la majeure partie de la logique de l'application est contenue dans ces composants, ils seraient, dans un monde idéal, écrits dans un langage / script / DSL indépendant de la plate-forme, qui pourrait ensuite simplement être chargé dans l'application, sur n'importe quelle plate-forme.

J'ai été amené à croire cependant que le monde n'est pas idéal et que les performances de Lua, etc. sur les appareils mobiles ne sont toujours pas à la hauteur, que les frais généraux sont trop importants et que j'aurais des problèmes plus tard si je est allé dans cette voie?

Est-ce vraiment le cas? Évidemment, il s’agit là d’une question hypothétique. Je suis heureux de pouvoir les écrire tous en Java, car c’est simple et facile de faire décoller les choses, mais je me plais à faire ce jeu (improbable, vu à quel point je n’aime pas avoir à traiter avec tous ces différents appareils mobiles) et je voulais créer un jeu commercialement viable - utiliserais-je Lua ou prendrais-je juste le bon coup en ce qui concerne le portage et réécrire tout le code?

Rob Ashton
la source

Réponses:

17

En ce qui concerne les langages de script, Lua est très rapide, mais comme tout le reste, il varie en fonction du processeur. Par exemple, Lua ne serait pas génial sur une plate-forme console, car elle a tendance à être très branchée, et certaines plates-formes console se ramifient très lentement. Pour répondre au mieux à votre question, je vous suggèrerais de faire quelques tests de performance. Voyez à quelle vitesse Lua exécute divers algorithmes sur le périphérique. Je suppose que tout ira bien tant que vous ne faites pas de calculs lourds ni d'itération dans votre code de script. (Vous ne devriez pas faire ça de toute façon. Ce sont des scripts. Faites des calculs dans le moteur.)

Cela dit, les scripts ne sont pas une solution miracle pour l'indépendance de la plate-forme. De toute façon, vous devrez peut-être réécrire dans Obj-C si vous portez sur l'iPhone en raison des restrictions imposées par Apple sur l'exécution du code dynamique. Je n'ai pas de lien, mais il vaut peut-être la peine de le lire. Apple autorise à peine le code géré (vous devez obtenir une autorisation spéciale pour exécuter une distribution spéciale). Ils ne permettront certainement pas une implémentation de Lua dans l'App Store.

[modifier] Apparemment, je me suis trompé à propos de la chose Lua sur iphone. Regardez les commentaires ci-dessous.

Sean Edwards
la source
9
Lua est largement utilisé dans les applications iPhone et des modifications ont été apportées aux termes qui le permettent. Voir ici: appleoutsider.com/2010/06/10/hello-lua
Colin Gislason
5
De nombreuses applications de console utilisent en réalité LUA. Oui, elle est branchée - mais cela n'a pas d'importance si vous contrôlez la logique de haut niveau. N'appelez pas cela simplement depuis votre boucle de rendu;) Autant que je sache, LUA for games convient parfaitement aux modifications récentes apportées au contrat de développeur - de nombreux jeux sont pilotés par LUA. Mais comme pour tout développement sur une plate-forme fermée, demandez des réponses définitives au propriétaire de la plate-forme (Apple). En outre, pas besoin d'Obj-C - l'iPhone permet parfaitement le C / C ++. (Je vous recommande cependant de ne rien faire d'UIKit dans Obj-C. Facteur de douleur réduit)
Rachel Blum le
7
Allez allez la boîte à savon magique. Lua est un nom et non un acronyme, vous n'écririez jamais JAVA. Lua signifie lune. Vous n'écririez pas MOON. merci - le nazi Lau.
deft_code
2
Malheureusement, je connais beaucoup de gens qui écrivent "JAVA".
1
J'ai beaucoup utilisé Lua sur NDS (qui est beaucoup moins puissant qu'un IPhone) et cela a fonctionné assez rapidement. Assez rapide pour que nous puissions créer plus de la moitié de la logique d’un jeu directement dans Lua.
Klaim
7

L'implémentation C de Lua est spécialement conçue pour fonctionner sur des périphériques intégrés. C'est petit et rapide (pour un langage de script). J'aurais pensé que c'était bien pour au moins des tâches légères.

tenpn
la source
4

Sûr. Il est très peu probable que la logique de script soit votre goulet d’étranglement (vous profilerez réellement avec Shark ou Instruments, non?). J'ai travaillé sur la version iPhone de Marooned, qui utilisait beaucoup de Lua pour la logique de jeu. J'ai fait beaucoup de réglages, et Lua était à 0%.

(Lua était une zone grise lorsque nous avons publié Marooned, mais depuis, il a été officiellement béni pour le développement iOS.)

David Dunham
la source
1

Consultez la page http://code.google.com/p/android-scripting/ pour connaître la méthode recommandée pour effectuer des scripts sur Android. Lua ne convient toujours pas très bien sur la plate-forme Android, car elle nécessite C, bien sûr. Vous pouvez utiliser le NDK, mais ce n’est pas une solution miracle.

utilisateur1800
la source
1

Cela dépend un peu de la part de votre logique de jeu intégrée dans les scripts. En général, LUA est utilisé comme colle de haut niveau, mais une grande partie du travail difficile se fait par C (++). Oui, LUA est rapide en ce qui concerne les langages de script. Vous observez toujours un ralentissement par rapport aux langues natives de 30 à 50 fois environ, donc tout dépend de ce qui se passe dans LUA.

Kaj
la source
0

Vous pouvez réellement écrire votre jeu entier en Lua et éviter complètement Java / ObjectiveC / C / C ++.

Pour le développement multi-plateformes, utilisez Corona . Son utilisation est gratuite jusqu'à ce que vous prévoyiez d'expédier sur l'App Store ou Android Marketplace.

Si vous souhaitez cibler l'iPhone / Pad / Touch, jetez un coup d'œil à la cire .

En guise de remarque @Sean Edwards: j'ai participé à la livraison de cinq titres destinés à la Nintendo DS, à la Wii, à la Sony PSP et à la Xbox360, qui utilisaient tous le même moteur et dont le script était écrit en Lua. Il est largement utilisé sur les consoles et les mobiles.

Bkersten
la source