Qual linguagem de script você recomendaria para um projeto de jogo em C ++? [fechadas]

14

Ao criar scripts aqui, quero dizer não apenas colocar dados de configuração em um script, mas criar partes do projeto como alguns métodos de classe, testar loop de jogo específico etc. Isso não seria apenas para acelerar o desenvolvimento, mas também permitir que os jogadores vissem alguns deles. scripts para ajustar alguns aspectos do jogo.

Alguma linguagem como Lua tem alguns wrappers como luabind, mas quando eu a usei no passado, ela teve problemas porque não suportava a redefinição de método em um contexto de herança.

Quais são as suas sugestões de idioma / wrappers para usar ou não?

Frédérick Imbeault
fonte

Respostas:

9

Jogos
com script Lua Motores de jogo com script Lua

Eu acho que Lua é a melhor chance.

Este artigo é sobre a integração de Lua e C ++. Diz:

LuaBind é um ótimo produto, mas para mim parecia muito complicado. Por um lado, o código não é fácil de seguir onde estão as classes e os objetos. Também vendo que eu queria integrar Lua a um aplicativo wxWidgets, o uso de modelos era um não-não (você pode ler problemas de plataforma cruzada no site wxWidgets).

Existem muitas outras bibliotecas de ligação:

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~ celes / tolua /

Qual é o melhor wrapper C ++ / Lua?

Basta selecionar e aproveitar.

lcpp
fonte
Sim, Lua é bastante simples e muito fácil de integrar com C. Na verdade, esse é o principal objetivo de Lua, sendo uma linguagem incorporada.
Marco Mustapic
Obrigado pela referência no LuaBind, talvez pesquisar em outras bibliotecas de ligação me convencerá a aceitar o Lua novamente.
Frédérick Imbeault
No entanto, sugiro apenas executar seus scripts no segmento principal e fornecer um alocador de pool se o desempenho for uma preocupação.
Kylotan
5

Eu gosto de Chaiscript ; Não uso há muito tempo, mas parece bastante sólido até agora.

Ao contrário do Python ou lua, ele é construído desde o início para ser usado com C ++. O processo de ligação parece muito mais limpo do que com o luabind / etc.

Aqui está o resumo do site:

O ChaiScript é a primeira e única linguagem de script projetada desde o início com a compatibilidade C ++> em mente. É uma linguagem funcional do tipo incorporada, inspirada no ECMAScript.

O ChaiScript é licenciado sob a licença BSD.

Riley Adams
fonte
Interessante. E os testes de desempenho? Existe alguma comparação ChaiScript / Lua / Python?
Topright
Bastante interessante, há algum problema com desvantagens / bugs / desempenho que você passou até agora?
Frédérick Imbeault
Não vi nenhum benchmark, mas ainda não tive problemas de desempenho ... até agora, minha principal preocupação seria não converter entre tipos numéricos implicitamente (para que você receba um erro se passar um int uma função que flutua, etc).
Riley Adams #
1
Apenas um FYI, já que esse comentário tem 6 anos - o ChaiScript agora faz conversões numéricas implícitas.
Lefticus
5

Eu recomendaria Lua .
Python também é muito popular. Muitos mecanismos de jogos em destaque (Blender, por exemplo) o usam.
C ++ :: Boost tem uma biblioteca para trabalhar com Python.
Eu li sobre o esquilo , mas não o usei.

Você pode ler esta visão geral do Game Engine . Existe uma Scriptingcoluna. Você pode ver que Lua e Python são as linguagens de script mais populares.

canto superior direito
fonte
Sobre o Boost, acho que talvez seja uma biblioteca enorme e muitas coisas não sejam muito úteis em todos os projetos. Na verdade, o luabind usa muito o Boost e é uma das coisas que eu não gostei.
Frédérick Imbeault
1
Eu diria que é uma vantagem. Você tem muitas soluções prontas para uso. E seu projeto tem apenas 1 dependência externa - Boost. Poucas bibliotecas pequenas (que usam estilos, abordagens, licenças e, por sua vez, podem ter dependências implícitas externas) são difíceis de atualizar, sincronizar com seu código e manter.
Topright
1
E você inclui apenas as bibliotecas do Boost (cabeçalhos) necessárias. O impulso é enorme, mas você não se importa até precisar disso ou daquilo.
Topright
E sobre python e Lua, existem alguns wrappers para C ++ que permitem redefinir métodos de classe, criar novos métodos, etc? E esse recurso pode ser controlado a partir do código C ++ (por segurança)? Como eu disse, LuaBind faz essas coisas, mas falha em um contexto de herança, o que é bastante comum em um projeto de jogo. Métodos gostaria de redefinida são para exemple, testa loop do jogo específico, métodos de atualização de entidades como jogador, método de atualização do próprio mundo do jogo, etc.
Frédérick Imbeault
Lua não possui classes e objetos, mas eles podem ser emulados por tabelas. Aqui está uma biblioteca Lua para OOP que eu prefiro: love2d.org/wiki/MiddleClass .
Topright
4

Por que não construir o seu próprio?

Se você tiver tempo, paciência e vontade de aprender, poderá sempre tentar desenvolver seu próprio mecanismo de script com todos os recursos e sintaxe necessários.

Vantagens

  1. Você aprenderá sobre uma parte interessante da Ciência da Computação.
  2. Ao desenvolver um mecanismo de script 'interno', ele fornece controle completo do início ao fim, permitindo que você adapte o mecanismo exatamente ao que você precisa.
  3. Se você precisar fazer alterações mais tarde, elas podem facilitar um pouco o conhecimento das entradas e saídas de sua própria base de código, em vez de aprender as entradas e saídas de outras pessoas.
  4. Você não precisará se preocupar em manter seu motor atualizado com os patches de outra pessoa.

Desvantagens

  1. Tempo. Muitas pessoas não têm. Se você precisar de algo AGORA, tente um mecanismo já existente (como um dos já sugeridos).

  2. Rapidez. Muitos mecanismos de script existentes são muito rápidos - uma solução personalizada pode não ser tão rápida.

  3. Tamanho da equipe. Muitos mecanismos de script existentes têm equipes maiores de pessoas trabalhando na base de código, sejam equipes privadas ou voluntários globais, há algo a ser dito para o código que é verificado e verificado novamente por muitas outras pessoas.

  4. Um mecanismo de script requer uma certa quantidade de planejamento inicial para executar com eficácia. Há muitas bases que precisariam ser implementadas também que talvez não tenham a ver com o mecanismo de script real.

  5. Sua base de jogadores / desenvolvedores teriam que se acostumar ao seu mecanismo de script. Isso pode não ser um problema se a sintaxe e a funcionalidade forem quase as mesmas da maioria dos mecanismos de script modernos, mas esteja ciente disso.

Esta não é de maneira alguma uma lista exaustiva. Se você precisar fazer uma grande quantidade de alterações no back-end de uma linguagem de script existente para obter a funcionalidade desejada, IMO, provavelmente deverá procurar outro mecanismo que atenda melhor aos seus requisitos ou apenas crie o seu.

Percebo que as pessoas gostam de brincar com "preguiça" e "não reinventar a roda", mas acho que há algo a ser dito sobre como aprender como essas coisas são feitas. E uma implementação específica provavelmente será melhor para o seu projeto do que uma implementação genérica.

"Criando sistemas de script em C ++" parece ser o (s) artigo (s) preferido (s) que as pessoas compartilham ao discutir o tópico: http://www.gamedev.net/reference/list.asp?categoryid=76

Dalin Seivewright
fonte
2
Concordei que isso tem uma vantagem educacional específica. Ainda assim, requer algum conhecimento e habilidades em teoria das linguagens de programação (que muitas pessoas pensam que têm) e algum conhecimento em teoria da computação. Se isso der uma aparência atraente a alguém, sugiro dois livros: amazon.com/gp/product/0136073476/ref=oss_product e amazon.com/gp/product/0534950973/ref=oss_product
Frédérick Imbeault
Você ficaria surpreso com o quão longe você pode ir sem nenhum conhecimento real dessas coisas. Muitos MUDs têm uma linguagem de script que é pouco mais do que uma lista de instruções com alguns hacks para permitir condicionais, e ainda assim eles podem conseguir muito com isso.
Kylotan
Estive lá, fiz isso. Aprendemos muito sobre análise, design de compilador, máquinas de bytecode, tudo isso. Da próxima vez, provavelmente vou usar Lua e apreciar ainda mais. :)
Kaz Dragon
2

Eu tentei Lua, Python, Scheme e Squirrel. Lua trabalhou melhor; possui uma comunidade maior e melhor suporte que o Squirrel, e características de memória e desempenho muito melhores que o Python. O esquema funcionou muito bem também e tem um intérprete muito pequeno, mas era difícil para os designers entenderem uma linguagem funcional.

Crashworks
fonte