Pergunta

Eu quero incorporar Javascript em um motor de jogo hobby meu. Agora que temos a 5ª geração de motores Javascript para fora (tudo super rápido) Estou curioso que motor você escolheria para incorporar num quadro C ++ (que inclui facilidade real de embeding-lo)?

. Nota: Só para deixar claro, eu não estou interessado em scripting DOM ou escrever JavaScript em um navegador

Aqui está uma compilação de links até agora e algumas dicas do fio

Apenas para o registro, eu amo Lua e já incorporado-lo em motores de jogo cerca de 5 vezes no trabalho.

No entanto, agora este é um hobby, e eu acho que o Javascript ser conhecido pela maioria dos desenvolvedores web e porque seus desenvolvedores ECMA, Flash e Flex, um motor de jogo que utiliza Javascript e XML para criação de scripts seria mais user-friendly e atender a uma base maior de usuários (e que até agora não tive a chance de usar suas habilidades para jogos) do que um com Lua (e há uma abundância de pessoas à sua volta!).

Também para o registro eu vou com V8 em um presente, principalmente porque eu gosto do estilo que do C ++.

Foi útil?

Solução

da Mozilla SpiderMonkey é bastante fácil e bem documentado . É uma API C, mas é simples de envolvê-la em C ++. Ele pode ser compilado para ser thread-safe, o que é útil para jogos desde que você provavelmente quer ter a sua lógica principal de uma lógica fio e interface de usuário em um segundo segmento.

V8 do Google pode ser uma boa escolha, uma vez que você estiver usando C ++, mas Eu não tenho nenhuma experiência com ele ainda. De acordo com a a documentação (graças a < a href = "https://stackoverflow.com/questions/93692/which-javascript-engine-would-you-embed-in-an-application#97195"> Daniel James ), V8 não é thread- seguro, embora isso possa mudar no futuro.

Há também do WebKit SquirrelFish, mas eu não poderia encontrar uma versão independente do que quando Eu estava olhando antes.

Outras dicas

Eu tentei tanto SpiderMonkey e V8. Com SpiderMonkey, eu não poderia obter qualquer coisa para trabalhar. Eu não poderia mesmo obter os exemplos em mozilla.org para compilar.

V8 trabalhou out-of-the-box e eu tenho alguns C ++ básico <-> Javascript interação acontecendo muito rapidamente. Há algumas listas do Google para pessoas que usam V8, e eu achei a maioria das minhas perguntas já respondidas lá.

Eu acredito que v8 só funciona em processadores x86, x64 e braço no momento. Que pode ser uma desvantagem.

Com relação ao fio de segurança, de incluem / v8.h :

 * Multiple threads in V8 are allowed, but only one thread at a time
 * is allowed to use V8.  The definition of 'using V8' includes
 * accessing handles or holding onto object pointers obtained from V8
 * handles.  It is up to the user of V8 to ensure (perhaps with
 * locking) that this constraint is not violated.

Você pode ler mais no arquivo de origem (ele se parece com documentação doxygen, mas eles não parecem ter colocá-lo em qualquer lugar).

Update: Esse comentário foi removido, provavelmente há algum tempo. Parece que v8 agora tem um objeto Isolate que representa uma instância do motor. Um exemplo Isolate único só pode ser utilizado em um único segmento de cada vez, mas outros exemplos Isolate pode ser utilizado em outros segmentos, ao mesmo tempo.

Java Script é realmente a linguagem certa para o seu jogo? Muitos dos jogos lá fora estão usando o href="http://www.lua.org/" rel="nofollow noreferrer"> Lua linguagem de programação

É um pouco fora do tópico, mas o pensamento fora da caixa pode ser importante para fazer as coisas direito.

O referência que saiu quando V8 primeiro hit da cena que mostrou V8 sendo 1,000% (ou qualquer outro) mais rápido do que outros motores foi fortemente ponderada para com os motores que eram bons em recursão favorecendo. Se seu código usa um monte de recursão, então V8 pode dar-lhe uma vantagem significativa, velocidade-wise. Para o "mundo real" (atualmente, pelo menos) coisas web, SquirrelFish extrema parece ser as mãos para baixo vencedor no momento (veja meu blog post sobre o tópico para os resultados do meu próprio teste, informal).

Como outros apontaram, facilidade de integração e qualidade de documentação pode prevalecer sobre a velocidade pura. É fazer jack não dizer, se você não enviar!

Quando se fala de um mecanismo de script e c ++ você poderia também considerar chaiscript . É perto de roteiro ECMA (~ Javascript) e muito fácil de incorporar em C ++.

O vendedor do site:

... ChaiScript, por outro lado, foi concebido a partir do zero com integração com C ++ em mente. ... ChaiScript não tem nenhuma meta-compilador, há dependências da biblioteca, não construir requisitos do sistema e nenhuma bagagem legado de qualquer tipo. No trabalho pode perfeitamente com quaisquer funções C ++ você expor a ele. Não têm para ser dito explicitamente sobre qualquer tipo, é função centric.

Com ChaiScript você pode literalmente começar script sua aplicação adicionando três linhas de código para o seu programa e não modificar o seu etapas de construção em tudo.

Eu esperaria para TraceMonkey, a próxima evolução do SpiderMonkey para sair. Mais rápido e melhor concebido. (Código usa doado Adobe Flash).

orgulhos TraceMonkey-se em fazer ações repetitivas muito mais rápido por meio da otimização de forma agressiva a estrutura em tempo de execução com base no uso real, que algo a ser útil para o jogo-aumento.

Tente Javascript NET:

http://javascriptdotnet.codeplex.com/

Ele implementa Google V8. Você pode compilar e executar Javascript diretamente do código .NET com ele, e CLI abastecimento de objetos para ser usado pelo código Javascript também. E V8 é provavelmente o melhor motor já criado em termos de desempenho, gera código nativo de Javascript.

Você também pode querer olhar em V8 do Google. É muito novo, no entanto.

Gostaria de manter um olho em v8, uma vez que está gritando motor rápido javascript, e eu tenho certeza que ele irá desenvolver suporte multi-plataforma à medida que cresce a maturidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top