¿Cómo se agrega un lenguaje de script a un juego?


25

Digamos que tengo un juego escrito en C ++. Pero quiero agregarle algunas funciones de modding o scripting. ¿Cómo se podría agregar una funcionalidad de scripting a tu juego?


El lenguaje más popular: vea Lua (lenguaje de programación) y Lua (langugae de programación) - Ejemplo de API C : IBM tiene un gran artículo sobre esto: Incrustar LUA
Tamara Wijsman

Los pasos exactos dependen enormemente del idioma que desea agregar. Echa un vistazo a gamedev.stackexchange.com/questions/11/…
tenpn

Respuestas:


27

En primer lugar, debes decidir qué parte de tu juego está programada. Una opción es tener un juego completamente programado en el sentido de que, si bien las operaciones de back-end de tiempo crítico están codificadas en C ++, toda la lógica del juego está en el lenguaje de secuencias de comandos. Los diseñadores usan el backend como una API llamada desde el lenguaje de scripting de alto nivel. En el otro extremo, puede tener pocos lugares específicos donde se usan los scripts, como la interfaz de usuario o las secuencias de comandos, con la mayoría del código del juego todavía en C ++. Cada enfoque tiene ventajas (velocidad, flexibilidad, tiempo de compilación, alcance del juego, etc.), pero debe decidirlo de antemano.

Una vez que sepa cómo desea utilizar las secuencias de comandos, ahora debe decidir si va a utilizar un lenguaje de secuencias de comandos existente o su propio lenguaje específico de dominio . Hoy en día hay muchos lenguajes de secuencias de comandos para elegir con diferentes objetivos de diseño y audiencias objetivo, por lo que no estoy seguro de si vale la pena crear el suyo. Si decide implementar el suyo, aquí hay algunos recursos:

Lua es un lenguaje de script popular ligero y fácil de insertar. Utiliza una pila para la comunicación entre el host y el lenguaje incorporado y se utilizó con éxito en muchos juegos profesionales . Sol2 simplifica el proceso de unión de Lua y C ++. Si no le gusta la sintaxis de Lua, Moonscript es un lenguaje que compila a Lua y agrega un buen conjunto de características.

Otras opciones incluyen AngelCode , que le permite llamar a las funciones C y C ++ directamente. Python y Ruby son un poco más complejos de incrustar, pero son muy agradables de programar. Si desea incrustar Python, eche un vistazo a Boost.Python . Otra idea es incorporar JavaScript para aprovechar los rápidos motores de scripting desarrollados para los navegadores (ver V8 y SpiderMonkey ).


2
He implementado un lenguaje de script para mi proyecto de juego actual, y la ventaja principal es el control total sobre las primitivas del lenguaje. Las soluciones de secuencias de comandos preconstruidas son genéricas y es posible que no necesite todas las funciones que proporcionan. A pesar de todo debe no pensar en rodar su propio idioma a menos que estés seguro de que usted puede hacer algo que sea mejor para su juego de una solución existente.
Jon Purdy

Personalmente, me gusta Guile , tiene una gran integración con C. El único problema es la velocidad, pero con la versión 2.0 en los próximos meses eso también debería mejorar.
Joe D

Excelente respuesta El primer párrafo se puede resumir como "los desarrolladores de juegos crean una API que se consume para el contenido".
cenizas999

El término genérico para los idiomas personalizados (secuencias de comandos o de otro tipo) es DSL, que puede ayudar a saber si desea leer.
Patrick Hughes

2

Escribí una publicación sobre cómo incrustar el script GameMonkey en un juego usando DragonFire SDK aquí .

Básicamente, la idea es exponer sus funciones C \ C ++ al lenguaje de script elegido y usarlas desde su script. En mi tutorial, expuse 2 funciones del DragonFire SDK. Al inicio del juego, llamo a la función onStart desde el script y en la actualización, llamo a la función onTimer desde el script.

¡Espero que ayude!


1
También he subido una demostración de video aquí: bit.ly/dnCkar
astk
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.