¿Qué lenguaje de script recomendarías para un proyecto de juego en C ++? [cerrado]

14

Al hacer scripts aquí me refiero no solo a poner los datos de configuración en un script, sino a hacer scripts de partes del proyecto, como algunos métodos de clase, probar un bucle de juego específico, etc. Esto no sería solo para acelerar el desarrollo, sino también para permitir a los jugadores ver algunos de estos guiones para modificar algunos aspectos del juego.

Algunos lenguajes como Lua tienen algunos envoltorios como luabind, pero cuando lo usé en el pasado tuvo problemas porque no admitía la redefinición de métodos en un contexto de herencia.

¿Cuáles son sus sugerencias de lenguaje / envoltorios para usar o no usar?

Frédérick Imbeault
fuente

Respuestas:

9

Videojuegos con guiones Lua Motores de juegos con guiones
Lua

Creo que Lua es la mejor opción.

Este artículo trata sobre la integración de Lua y C ++. Dice:

LuaBind es un gran producto, pero para mí parecía demasiado complicado. Por un lado, el código no es fácil de seguir donde están las clases y los objetos. También viendo que quería integrar Lua en una aplicación wxWidgets, usar plantillas era un poco un no no (puedes leer problemas multiplataforma en el sitio wxWidgets).

Hay muchas otras bibliotecas vinculantes:

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

¿Cuál es el mejor contenedor de C ++ / Lua?

Solo selecciona y disfruta.

lcpp
fuente
Sí, Lua es bastante simple y muy fácil de integrar con C. De hecho, ese es el objetivo principal de Lua, ser un lenguaje incrustado.
Marco Mustapic
Gracias por la referencia en LuaBind, tal vez cavar en otras bibliotecas vinculantes me convencerá de tomar Lua nuevamente
Frédérick Imbeault
Sin embargo, sugeriría solo ejecutar sus scripts en el hilo principal y proporcionar un asignador de grupo si el rendimiento es una preocupación.
Kylotan
5

Me ha gustado Chaiscript ; No lo he estado usando durante mucho tiempo, pero hasta ahora parece bastante sólido.

A diferencia de Python o lua, está construido desde cero para usarse con C ++. El proceso de enlace parece mucho más limpio que con luabind / etc.

Aquí está el resumen del sitio web:

ChaiScript es el primer y único lenguaje de secuencias de comandos diseñado desde cero teniendo en cuenta la compatibilidad con C ++. Es un lenguaje de tipo funcional incorporado e inspirado en ECMAScript.

ChaiScript tiene licencia bajo la licencia BSD.

Riley Adams
fuente
Interesante. ¿Qué pasa con las pruebas de rendimiento? ¿Hay alguna comparación ChaiScript / Lua / Python?
vertical
Muy interesante, ¿hay alguna desventaja / error / problema de rendimiento que haya experimentado hasta ahora?
Frédérick Imbeault
No he visto ningún punto de referencia, pero aún no he tenido ningún problema de rendimiento ... hasta ahora, mi mayor agarre sería que no se convierte entre tipos numéricos implícitamente (por lo que obtienes un error si pasas un int a una función que toma un flotador, etc.).
Riley Adams
1
Solo un FYI, ya que este comentario tiene 6 años ahora, ChaiScript hace conversiones numéricas implícitas ahora.
lefticus
5

Yo recomendaría a Lua .
Python también es muy popular. Muchos motores de juegos destacados (Blender, por ejemplo) lo usan.
C ++ :: Boost tiene una biblioteca para trabajar con Python.
Leí sobre Ardilla , pero no la usé.

Puedes leer esta descripción general de Game Engine . Hay una Scriptingcolumna. Puede ver que Lua y Python son los lenguajes de script más populares.

parte superior derecha
fuente
Sobre Boost, creo que tal vez es una gran biblioteca y muchas cosas no son muy útiles en todos los proyectos. De hecho, luabind usa Boost mucho y es una de las cosas que no me gusta.
Frédérick Imbeault
1
Yo diría que es una ventaja. Tiene muchas soluciones fuera de la caja. Y su proyecto tiene solo 1 dependencia externa: Boost. No hay muchas bibliotecas pequeñas (que usan diferentes estilos, enfoques, licencias y, a su vez, pueden tener dependencias implícitas externas) que son difíciles de actualizar, sincronizar con su código y mantener.
vertical
1
E incluye solo las bibliotecas Boost (encabezados) que necesita. El impulso es enorme, pero no te importa hasta que necesites esto o aquello.
vertical
Y sobre Python y Lua, ¿hay algunos contenedores para C ++ que le permitan redefinir los métodos de clase, crear nuevos métodos, etc.? ¿Y esta característica se puede controlar desde el código C ++ (por seguridad)? Como dije, LuaBind hace estas cosas pero falla en un contexto de herencia, que es bastante común en un proyecto de juego. Los métodos que me gustaría redefinir son, por ejemplo, pruebas de bucle de juego específico, métodos de actualización de entidades como el jugador, método de actualización del mundo del juego, etc.
Frédérick Imbeault
Lua no tiene clases y objetos, pero pueden ser emulados por tablas. Aquí hay una biblioteca de Lua para OOP que prefiero: love2d.org/wiki/MiddleClass .
arriba el
4

¿Por qué no construir el tuyo?

Si tiene tiempo, paciencia y ganas de aprender, siempre puede intentar desarrollar su propio motor de secuencias de comandos con todas las características y sintaxis que necesita.

Ventajas

  1. Aprenderás sobre una parte interesante de la informática.
  2. Al desarrollar un motor de secuencias de comandos 'interno', le brinda un control completo de principio a fin al permitirle adaptar el motor exactamente a lo que necesita.
  3. Si necesita hacer algún cambio más adelante en el camino, pueden hacer que sea más fácil conocer las entradas y salidas de su propia base de código, en lugar de aprender las entradas y salidas de alguien más.
  4. No tendrá que preocuparse por mantener su motor actualizado con los parches de otra persona.

Desventajas

  1. Hora. No mucha gente lo tiene. Si necesita algo AHORA, pruebe un motor ya existente (como uno de los que ya se sugirió).

  2. Velocidad. Muchos motores de secuencias de comandos existentes son muy rápidos: una solución personalizada puede no ser tan rápida.

  3. Tamaño del equipo. Muchos motores de secuencias de comandos existentes tienen equipos más grandes de personas que trabajan en la base de código, ya sean equipos privados o voluntarios globales, hay algo que decir sobre el código que muchas otras personas verifican y vuelven a verificar.

  4. Un motor de secuencias de comandos requiere una cierta cantidad de planificación inicial para lograrlo de manera efectiva. Hay muchas bases que también deberían implementarse y que quizás no tengan que ver con el motor de secuencias de comandos real.

  5. Tu base de jugadores / desarrolladores tendrían que acostumbrarse a tu motor de secuencias de comandos. Esto puede no ser un problema si la sintaxis y la funcionalidad son casi las mismas que las de los motores de secuencias de comandos más modernos, pero tenga en cuenta eso.

De ninguna manera es una lista exhaustiva. Si tiene que hacer una gran cantidad de cambios en el back-end de un lenguaje de scripts existente para obtener la funcionalidad que desea, en mi opinión, probablemente debería buscar otro motor que se ajuste más a sus requisitos o simplemente cree el suyo propio.

Me doy cuenta de que a la gente le gusta "holgazanear" y "no reinventar la rueda", pero creo que hay algo que decir sobre aprender cómo se hace esto. Y una implementación específica probablemente será mejor para su proyecto que una implementación genérica.

"Crear sistemas de secuencias de comandos en C ++" parece ser el (los) artículo (s) favorito (s) que la gente comparte al discutir el tema: http://www.gamedev.net/reference/list.asp?categoryid=76

Dalin Seivewright
fuente
2
Acepté que esto tiene una ventaja educativa particular. Sin embargo, requiere algunos conocimientos y habilidades en la teoría de lenguajes de programación (que muchas personas piensan que tienen) y algunos conocimientos en teoría de la computación. Si esto responde a un atractivo para alguien, sugeriría estos dos libros: amazon.com/gp/product/0136073476/ref=oss_product y amazon.com/gp/product/0534950973/ref=oss_product
Frédérick Imbeault
Sin embargo, se sorprendería de lo lejos que puede llegar sin un conocimiento real de esas cosas. Muchos MUD tienen un lenguaje de script que es poco más que una lista de declaraciones con algunos hacks para habilitar los condicionales, y sin embargo, pueden lograr mucho solo con eso.
Kylotan
He estado allí, hecho eso. Aprendí mucho sobre análisis, diseño de compiladores, máquinas de código de bytes, todo eso. La próxima vez probablemente usaré Lua y lo agradeceré aún más. :)
Kaz Dragon
2

He probado Lua, Python, Scheme y Squirrel. Lua funcionó mejor; tiene una comunidad más grande y mejor soporte que Squirrel, y características de memoria y rendimiento mucho mejores que Python. Scheme funcionó muy bien también, y tiene un intérprete realmente pequeño, pero fue difícil para los diseñadores comprender un lenguaje funcional.

Crashworks
fuente