Pregunta

Quiero incorporar Javascript en uno de mis motores de juegos de hobby.Ahora que tenemos la quinta generación de motores Javascript (todos increíblemente rápidos), tengo curiosidad por saber qué motor elegiría para integrar en un marco C++ (que incluye la facilidad real de integrarlo).

Nota:Para que quede claro, no estoy interesado en las secuencias de comandos DOM ni en escribir Javascript en un navegador.

Aquí hay una recopilación de enlaces hasta el momento y algunos consejos del hilo.

Solo para que conste, me encanta Lua y ya lo he integrado en motores de juegos unas 5 veces en el trabajo.

Sin embargo, ahora este es un proyecto de hobby, y creo que Javascript, siendo conocido por la mayoría de los desarrolladores web y debido a sus desarrolladores ECMA, Flash y Flex, un motor de juego que use Javascript y XML para secuencias de comandos sería más fácil de usar y atendería a un mayor número de usuarios. base de usuarios (y una que hasta ahora no ha tenido la oportunidad de usar sus habilidades para juegos) que una con Lua (¡y hay muchos de ellos por ahí!).

También para que conste, optaré por V8 en este caso, principalmente porque me gusta su estilo C++.

¿Fue útil?

Solución

El mono araña de Mozilla es bastante fácil y está bien documentado.Es una API de C, pero es sencillo empaquetarla en C++.Se puede compilar para que sea seguro para subprocesos, lo cual es útil para juegos ya que probablemente querrás tener tu lógica principal en un subproceso y la lógica de la interfaz de usuario en un segundo subproceso.

El V8 de Google Podría ser una buena opción, ya que estás usando C++, pero todavía no tengo experiencia con él.De acuerdo a la documentación (gracias a Daniel James), V8 no es seguro para subprocesos, aunque esto puede cambiar en el futuro.

También hay Pez ardilla de WebKit, pero no pude encontrar una versión independiente de eso cuando busqué antes.

Otros consejos

Probé tanto SpiderMonkey como V8.Con SpiderMonkey, no pude hacer que nada funcionara.Ni siquiera pude compilar los ejemplos en mozilla.org.

V8 funcionó de inmediato y obtuve una interacción básica de C++ <-> Javascript con bastante rapidez.Hay algunas listas de Google para personas que usan V8, y allí ya encontré respuestas a la mayoría de mis preguntas.

Creo que v8 solo funciona en procesadores x86, x64 y arm por el momento.Lo cual podría ser una desventaja.

En cuanto a la seguridad del hilo, desde incluir/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.

Puede leer más en el archivo fuente (parece documentación de doxygen, pero no parece haberla puesto en ninguna parte).

Actualizar: Ese comentario fue eliminado, probablemente hace algún tiempo.Parece que la v8 ahora tiene una Isolate objeto que representa una instancia del motor.un solo Isolate La instancia solo se puede usar en un solo hilo a la vez, pero otras Isolate Las instancias se pueden utilizar en otros subprocesos al mismo tiempo.

¿Java Script es realmente el lenguaje adecuado para tu juego?Muchos de los juegos que existen utilizan el lua Lenguaje de programación para scripting.Es fácil de integrar, es muy pequeño, se compila en casi todas las plataformas y es fácil de aprender.

Esto se sale un poco del tema, pero pensar fuera de lo común puede ser importante para hacer las cosas bien.

El punto de referencia Eso salió a la luz cuando el V8 apareció por primera vez en escena y mostró que el V8 era 1000% (o lo que sea) más rápido que otros motores y tuvo una gran influencia en favorecer los motores que eran buenos en recursividad.Si su código utiliza mucha recursividad, entonces V8 podría brindarle una ventaja significativa en cuanto a velocidad.Para el material web del "mundo real" (al menos actualmente), SquirrelFish Extreme parece ser el ganador indiscutible en este momento (ver mi entrada de blog sobre el tema para los resultados de mis propias pruebas informales).

Como han señalado otros, la facilidad de integración y la calidad de la documentación pueden prevalecer sobre la pura velocidad.¡No significa jack si no realiza el envío!

Cuando se habla de un motor de secuencias de comandos y C++, también se podría considerar sillón.Es similar al script ecma (~Javascript) y es muy fácil de integrar en c++.

Vendedor de la página web:

...Chaiscript, por otro lado, fue diseñado desde cero con la integración con C ++ en mente....Chaiscript no tiene meta-compilador, ni dependencias de la biblioteca, ni requisitos del sistema de compilación y ningún equipaje heredado de ningún tipo.AT puede funcionar a la perfección con cualquier función de C ++ que exponga a ella.No es necesario que se lo cuente explícitamente sobre ningún tipo, está centrado en la función.

Con Chaiscript, puede comenzar a escribir su aplicación literalmente agregando tres líneas de código a su programa y no modificando sus pasos de compilación.

Esperaría a que saliera TraceMonkey, la próxima evolución de SpiderMonkey.Más rápido y mejor diseñado.(Utiliza código donado de Adobe Flash).

Tracemonkey se enorgullece de hacer que las acciones repetitivas sean mucho más rápidas al optimizar agresivamente la estructura en tiempo de ejecución en función del uso real, lo que debería ser útil para mejorar el juego.

Pruebe Javascript .NET:

http://javascriptdotnet.codeplex.com/

Implementa Google V8.Puede compilar y ejecutar Javascript directamente desde el código .NET y proporcionar objetos CLI para que los utilice también el código Javascript.Y V8 es probablemente el mejor motor jamás creado en términos de rendimiento, genera código nativo a partir de Javascript.

Quizás también quieras mirar V8 de Google.Aunque es bastante nuevo.

Estaría atento a la versión 8, ya que es un motor javascript tremendamente rápido y estoy seguro de que desarrollará soporte multiplataforma a medida que alcance la madurez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top