Je lis un livre sur le développement de jeux dans lequel ils vous montrent comment créer des scripts pour votre jeu à Lua. Ils programment Lua et l'utilisent à partir de C ++, mais je me demandais s'il y avait une bibliothèque ou une API pour utiliser Lua à partir de C #: spécifiquement à partir de XNA pour développer des jeux pour PC et XBox 360?
18
Réponses:
C'est là que je vous pointerais (http://www.xnua.com/xna_lua_xnua), mais cela n'a pas été mis à jour depuis longtemps.
C # est un langage génial, et pourrait dans un sens être utilisé comme langage de script dans votre jeu c #. Nick Gravelyn a créé de beaux tutoriels sur le moteur de tuiles (http://blog.nickgravelyn.com/downloads/#tileengine) et a utilisé un moteur de script personnalisé pour lancer la boîte de dialogue. Il a également un exemple de base lorsqu'il a découvert le mot-clé "yield": http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/
la source
Si vous recherchez des scripts en C #, jetez un œil à IronPython . Ce n'est pas seulement une API python pour C #, c'est en fait une implémentation python complètement distincte qui compile dans le même assemblage CLR (avec les mêmes performances) que C #, mais peut être interfacée avec un langage de script. Tout wrapper Lua pour C # serait beaucoup plus lent en raison de la surcharge de Marshalling.
la source
Comme l'a dit Sean, IronPython mérite d'être examiné. IronPython est en fait l'une des quelques implémentations de langage dynamique pour .NET ciblant le Dynamic Language Runtime (DLR). Il existe au moins un projet open source visant à implémenter Lua sur le DLR (comme celui-ci ), mais je ne sais pas s'il y a des implémentations en voie d'achèvement. Un ensemble de liaisons DLR bien implémenté pour Lua devrait fournir des performances comparables à IronPython et IronRuby, et serait beaucoup plus rapide qu'un wrapper Lua. À des fins de comparaison, IronPython fonctionne généralement mieux que CPython (parfois beaucoup mieux).
Remarque: Comme ElementCy l'indique ci-dessous, les langues DLR ne sont généralement pas prises en charge sur la Xbox 360. Cependant, il existe un "mode interprété" dans le DLR. Je n'en sais pas assez pour le dire avec certitude, mais il pourrait être possible de faire fonctionner IronPython (ou d'autres implémentations de langage DLR) sur la Xbox 360 en mode interprété, bien que les performances en souffriraient certainement. Il pourrait être utile de demander à un membre de l'équipe DLR s'il sait que cela est possible. Sinon, la Xbox 360 devrait bénéficier de la prise en charge de Reflection.Emit dans le cadre de la prochaine prise en charge de Silverlight. Si et quand cela se produit, j'imagine que le DLR est opérationnel sur la Xbox 360 ne sera pas un problème.
la source
La meilleure solution que je pourrais vous donner est de simplement scripter en C #. Vous pouvez les compiler lors de l'exécution lorsque vous ciblez des fenêtres et les compiler au préalable pour la xbox. (en tant que dll)
Ce serait la solution la plus simple. Vous pouvez également le faire en VB.NET ou dans n'importe quel langage .NET. (Je ne suis pas sûr pour les scripts cependant) Fondamentalement, je dis d'avoir vos scripts dans leur propre DLL. Vous pouvez les faire compiler au moment de l'exécution sur Windows. (voulez-vous vraiment qu'ils le fassent sur la Xbox 360?, vous ne pouvez pas mettre à jour vos jeux là-bas, du moins je ne pense pas)
Je peux comprendre votre frustration, je voulais aussi utiliser Lua.
Pour résumer: 1) Faites-le construit au moment de l'exécution sur Windows 2) Construisez-le avant la main pour la Xbox 360
Voilà ce que je recommande.
la source
L'interpréteur Lua n'est pas géré, AFAIK, vous ne pouvez donc pas le faire fonctionner sur Xbox avec XNA
Vous pouvez utiliser un interpréteur Javascript appelé Jint qui ne repose pas sur DLR et fonctionne sur Xbox ( http://jint.codeplex.com/ )
la source
Il ne répond pas techniquement à votre question (ne fonctionne pas sur la xbox), mais LuaInterface permet une intégration de Lua avec C # sans douleur.
la source
Juste pour mettre à jour cette question, j'ai passé la dernière journée à faire des recherches approfondies, et j'ai trouvé que l'utilisation d'UniLua (conçue pour être utilisée avec l'unité, implémentation pure C #) est la meilleure option et la plus efficace pour obtenir Lua sur Xbox. Je l'ai démonté, j'ai retiré tout le matériel Unity, et cela fonctionne très bien.
J'ai également ajouté certaines fonctionnalités trouvées dans LuaInterface en surchargeant l'opérateur [] pour LuaState, etc.
CFWLua
J'espère que cela a été utile.
la source