Existe-t-il une API Lua qui fonctionne avec C # pour le développement PC et XBox 360? [fermé]

18

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?

alFador
la source
5
Une sorte de petite piqûre, mais c'est Lua (un nom), pas LUA (un acronyme, ça ou vous criez)
RCIX
Depuis la page "A propos" de Lua: "Lua a été utilisé pour étendre des programmes écrits non seulement en C et C ++, mais aussi en ... C # ...". Le premier résultat de Google pour "lua in C #" était un article intéressant de GameDev.net ( gamedev.net/reference/articles/article2275.asp ) intitulé Using Lua with C #.
reverbb
De nombreux développeurs .net utilisent ironpython ou ironruby pour les scripts.
Déchiré

Réponses:

6

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/

ElementCy
la source
3
Quelques bons points ici. Une chose à laquelle vous devez penser est la suivante: pourquoi voulez-vous un langage de script lorsque votre jeu est écrit en c #? Les moteurs C ++ peuvent gagner beaucoup d'agilité en utilisant un langage de script, car C ++ prend généralement beaucoup de temps à compiler. C # est rapide à cet égard. Si, pour une raison quelconque, vous souhaitez que vos scripts soient compilés au moment de l'exécution, vous pouvez toujours utiliser CodeDom (ou toute autre méthode de génération de code) pour compiler un fichier CS au moment du chargement, mais cela ne fonctionnera que sur PC. Il y a un chapitre à ce sujet dans le livre "Game Engine Toolset Development"
Cubed2D
^^ Game Engine Toolset Development est un bon livre :). C'est un peu dépassé maintenant, mais les concepts sont toujours solides. Le problème avec les liaisons de langage de script .NET est que, pour fonctionner sur la Xbox 360, elles doivent à peu près être interprétées. Sans System.Reflection.Emit, vous ne pouvez pas faire grand-chose en termes de génération de code. J'avais l'impression que ces capacités arriveraient sur la Xbox 360 dans un proche avenir, mais d'après la discussion sur les commentaires dans ma réponse ci-dessous, ce n'est probablement pas le cas. Ainsi, les performances des scripts sur la Xbox 360 ne seront probablement pas aussi bonnes :(.
Mike Strobel
@ Cubed2D: Lua est une sorte de standard de l'industrie pour les jeux de script, et il est également plus facile à comprendre pour le programmeur non professionnel.
RCIX
@Mike à votre droite, peut compiler ou générer du code sur le 360. Si j'allais l'implémenter, je ne prendrais tout simplement pas en charge les scripts c # sur 360, et je l'aurais simplement comme une fonctionnalité de jeu d'outils pour PC. Ajustez simplement le projet vs pour inclure le dossier des scripts sur une version 360 et ignorer sur un PC. @RCIX simplement parce que tout le monde le fait, ne signifie pas que vous devriez. Si vous voulez utiliser Xna, ça va être plus problématique que cela en vaut la peine. Il y a de meilleures façons d'exposer des paramètres modifiables à des non-programmeurs dans le monde .net essayant d'implémenter lua (ce que je suppose que vous obtenez avec votre commentaire non pro-programmeur)
Cubed2D
@ Cubed2D: C'est un bon point, mais cela dépend vraiment de votre plateforme cible. si vous écrivez uniquement pour le PC, vous pouvez utiliser LuaInterface et la dll native lua, sans avoir à écrire une implémentation. En outre, le fait est que, comme il a un tel succès dans le monde du développement de jeux, ce sont des fonctionnalités naturellement développées qui le rendent bon pour cet environnement. De plus, j'ai fait mes premiers pas dans la programmation via Lua, et je parie que beaucoup de gens l'ont fait, donc on comprend pourquoi les gens veulent l'utiliser.
RCIX
2

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.

Sean Edwards
la source
2

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.

Mike Strobel
la source
4
Seul problème avec IronPython, il ne fonctionnera pas sur la xbox360. C'est bien si vous souhaitez l'utiliser uniquement sur PC. IronPyton utilise beaucoup System.Reflection.Emit, ce qui n'est pas disponible sur le framework .net de la Xbox.
ElementCy
Un très bon point. Mis à jour.
Mike Strobel
2
Ne pensez pas xbox devient Reflection.Emit dans un proche avenir, comme WinPhone a à la fois XNA et silverlight et ne supporte pas cet espace de noms
Cubed2D
1
Tu pourrais avoir raison. WP7 n'exécute pas Silverlight, mais "Silverlight Mobile Compact Framework", qui est basé sur .NET CF au lieu de .NET. Je crois que la Xbox 360 exécute également .NET CF au lieu du .NET Framework complet, il est donc probable qu'elle se retrouve avec une implémentation similaire à celle de WP7. Tant pis.
Mike Strobel
2

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.

Michael Coleman
la source
1
  1. L'interpréteur Lua n'est pas géré, AFAIK, vous ne pouvez donc pas le faire fonctionner sur Xbox avec XNA

  2. Vous pouvez utiliser un interpréteur Javascript appelé Jint qui ne repose pas sur DLR et fonctionne sur Xbox ( http://jint.codeplex.com/ )

wizzard0
la source
J'aurais dit que le premier point est faux, car il y a plusieurs liens ici qui ont Lua <-> C #.
The Communist Duck
Vous ne pouvez exécuter que du code managé sur la Xbox. Un pont Lua <-> C # est un code non managé vous permettant d'appeler Lua à partir du code managé; tant que MS ne l'inclut pas dans XNA ou le système d'exploitation Xbox 360, vous ne pouvez pas l'exécuter là-bas.
0

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.

RCIX
la source
0

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.

Bradley Galloway
la source