Estou lendo um livro sobre desenvolvimento de jogos no qual eles mostram como criar scripts para o seu jogo em Lua. Eles programam Lua e o usam em C ++, mas eu queria saber se existe uma biblioteca ou API para usar Lua em C #: especificamente do XNA para desenvolver jogos para PC e XBox 360?
18
Respostas:
É aqui que eu indicaria você (http://www.xnua.com/xna_lua_xnua), mas não foi atualizado por um longo tempo.
C # é uma ótima linguagem e, em certo sentido, poderia ser usada como uma linguagem de script no seu jogo de c #. Nick Gravelyn criou alguns bons tutoriais sobre o mecanismo de mosaico (http://blog.nickgravelyn.com/downloads/#tileengine) e usou um mecanismo de script personalizado para disparar o diálogo. Ele também tem um exemplo básico quando aprendeu sobre a palavra-chave "yield": http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/
fonte
Se você está procurando scripts em C #, definitivamente dê uma olhada no IronPython . Não é apenas uma API python para C #, é na verdade uma implementação python completamente separado, que compila para o mesmo CLR assembly (com o mesmo desempenho) que o C # faz, mas pode ser conectado com como uma linguagem de script. Qualquer wrapper Lua para C # seria muito lento devido à sobrecarga do Marshalling.
fonte
Como Sean disse, vale a pena olhar para o IronPython. O IronPython é na verdade uma das poucas implementações de linguagem dinâmica para .NET direcionadas ao Dynamic Language Runtime (DLR). Há pelo menos um projeto de código aberto destinado a implementar Lua no DLR (como este ), mas não tenho certeza se existem implementações próximas da conclusão. Um conjunto bem implementado de ligações DLR para Lua deve fornecer desempenho semelhante ao IronPython e IronRuby e seria muito mais rápido que um wrapper Lua. Para fins de comparação, o IronPython geralmente apresenta um desempenho melhor que o CPython (às vezes significativamente melhor).
Nota: Como ElementCy afirma abaixo, idiomas DLR geralmente não são compatíveis com o Xbox 360. No entanto, não é um "modo interpretado" no DLR. Não sei o suficiente para ter certeza, mas pode ser possível executar o IronPython (ou outras implementações de linguagem DLR) no Xbox 360 no modo interpretado, embora o desempenho certamente sofra. Pode valer a pena pedir a alguém na equipe DLR se eles sabem que isso seja possível. Caso contrário, o Xbox 360 deve receber o suporte do Reflection.Emit como parte do próximo suporte do Silverlight. Se e quando isso acontece, eu imagino recebendo o DLR-se e em execução no Xbox 360 não será um problema.
fonte
A melhor solução que eu poderia dar é apenas roteiro em C #. Você pode compilá-los em tempo de execução quando você direcionar janelas e compilá-los antes da mão para o xbox. (como uma dll)
Essa seria a solução mais fácil. Você também pode fazê-lo em VB.NET ou qualquer linguagem .NET. (não tenho certeza sobre os scripts) Basicamente, estou dizendo para ter seus scripts em sua própria DLL. Você pode compilá-los em tempo de execução no Windows. (você realmente quer que eles façam isso no xbox 360 ?, você não pode atualizar seus jogos por lá, pelo menos acho que não)
Posso entender sua frustração, eu queria usar Lua também.
Para resumir: 1) Tê-lo construído em tempo de execução no Windows 2) Construir-lo antes da mão para a Xbox 360
É o que eu recomendo.
fonte
O intérprete Lua não é gerenciado, AFAIK, então você não pode fazê-lo funcionar no Xbox com XNA
Você pode usar o intérprete Javascript chamado Jint, que não depende do DLR e funciona no Xbox ( http://jint.codeplex.com/ )
fonte
Tecnicamente, ele não responde à sua pergunta (não funciona no xbox), mas o LuaInterface permite a integração do Lua com o C # de maneira relativamente simples.
fonte
Só para atualizar esta pergunta, eu passei o último dia fazendo alguma pesquisa extensa, e descobri que usando UniLua (feita para uso com a unidade, C implementação puro #) é o melhor e mais eficaz opção para obter Lua no Xbox. Tirei-o, tirou todo o material Unidade, e ele funciona muito bem.
Também adicionei algumas funcionalidades encontradas no LuaInterface, sobrecarregando o operador [] para LuaState, e assim por diante.
CFWLua
Espero que isso tenha sido útil.
fonte