Existe alguma API Lua que funcione com C # para desenvolvimento em PC e XBox 360? [fechadas]

18

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?

alFador
fonte
5
Uma espécie de pequeno procurar defeitos, mas é Lua (um nome), não LUA (um acrônimo, que ou você está gritando)
RCIX
Na página Lua "Sobre": "Lua foi usada para estender programas escritos não apenas em C e C ++, mas também em ... C # ...". O primeiro resultado do Google para "lua em C #" foi um artigo interessante do GameDev.net ( gamedev.net/reference/articles/article2275.asp ) intitulado Usando Lua com C #.
amigos estão dizendo sobre reverbb
Muitos desenvolvedores de .net usam ironpython ou ironruby para scripts.
Arrancado

Respostas:

6

É 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/

ElementCy
fonte
3
Alguns bons pontos aqui. Uma coisa a se pensar é por que você quer uma linguagem de script quando seu jogo é escrito em c #? Os mecanismos C ++ podem ganhar muita agilidade ao usar uma linguagem de script, pois o C ++ normalmente leva muito tempo para compilar. C # é muito rápido nesse sentido. Se, por algum motivo, você desejar que seus scripts sejam compilados em tempo de execução, você sempre poderá usar o CodeDom (ou qualquer outro método de geração de código) para compilar um arquivo CS no tempo de carregamento, mas isso funcionaria apenas no PC. Há um capítulo sobre isso no livro "Game Engine Toolset Development"
Cubed2D 14/07/10
^^ O Game Engine Toolset Development é um bom livro :). Está um pouco desatualizado agora, mas os conceitos ainda são sólidos. O problema com as ligações da linguagem de script .NET é que, para rodar no Xbox 360, elas praticamente precisam ser interpretadas. Sem o System.Reflection.Emit, você não pode fazer muito em termos de geração de código. Fiquei com a impressão de que esses recursos chegariam ao Xbox 360 em um futuro próximo, mas com base na discussão de comentários na minha resposta abaixo, esse provavelmente não é o caso. Assim, o desempenho do script no Xbox 360 provavelmente não será tão grande :(.
Mike Strobel
@ Cubed2D: Lua é um tipo de padrão da indústria para jogos de script, e também é mais fácil para o programador não profissional entender.
RCIX 24/07
@ Mike à sua direita, pode compilar ou gerar código no 360. Se eu fosse implementar isso, simplesmente não suportaria scripts c # no 360 e apenas o tinha como um recurso de conjunto de ferramentas para pc. Basta ajustar o projeto vs para incluir a pasta de scripts em uma versão 360 e ignorar em uma versão para PC. @RCIX só porque todo mundo faz isso, não significa que você deveria. Se você quiser usar o Xna, será mais complicado do que vale a pena. Há melhores maneiras de expor parâmetros tweakable a não programadores no mundo .net tentando implementar lua (que eu assumo o seu chegando com o seu non comentário pró-programador)
Cubed2D
@ Cubed2D: Esse é um bom argumento, mas realmente depende da sua plataforma de destino. se você está escrevendo apenas para o PC, pode usar LuaInterface e a dll lua nativa e não precisa escrever uma implementação. Além disso, o ponto é que, como possui muitos seguidores no mundo do desenvolvimento de jogos, são recursos naturalmente desenvolvidos que o tornam bom para esse ambiente. Além disso, eu comecei a programar através de Lua e aposto que muitas pessoas fizeram, por isso é compreensível o motivo pelo qual as pessoas querem usá-lo.
RCIX 26/07
2

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.

Sean Edwards
fonte
2

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.

Mike Strobel
fonte
4
Único problema com o IronPython, ele não roda no xbox360. Tudo bem se você quiser usá-lo apenas para PC. Usos IronPyton System.Reflection.Emit muito, e que não está disponível no .NET framework do Xbox.
ElementCy
Um ponto muito bom. Atualizada.
Mike Strobel
2
Não acho que xbox está ficando Reflection.Emit qualquer momento em breve, como WinPhone tem tanto XNA e Silverlight e não suporta que namespace
Cubed2D
1
Você pode estar certo. O WP7 não executa o Silverlight, mas o "Silverlight Mobile Compact Framework", que é baseado no .NET CF em vez do .NET. Acredito que o Xbox 360 também execute o .NET CF em vez do .NET Framework completo, por isso é provável que acabe com uma implementação semelhante à do WP7. Ah bem.
precisa
2

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.

Michael Coleman
fonte
1
  1. O intérprete Lua não é gerenciado, AFAIK, então você não pode fazê-lo funcionar no Xbox com XNA

  2. Você pode usar o intérprete Javascript chamado Jint, que não depende do DLR e funciona no Xbox ( http://jint.codeplex.com/ )

wizzard0
fonte
Eu diria que o primeiro ponto é falso, já que existem vários links aqui com Lua <-> C #.
The Duck comunista
Você só pode executar código gerenciado no Xbox. A Lua <-> C # ponte é código não gerenciado que lhe permite chamar Lua de código gerenciado; até que a MS o inclua no XNA ou no Xbox 360 OS, você não poderá executá-lo lá.
0

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.

RCIX
fonte
0

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.

Bradley Galloway
fonte