Empecé a hacer algunos juegos pequeños en Java, y estoy considerando aprender C # para un proyecto más grande. Me gustaría mucho hacer un juego modificable, pero alguien me dijo que tengo que seguir con Java si quiero que el juego sea modificable, aunque no entiendo por qué.
Entonces, ¿qué características del lenguaje de programación hacen que un lenguaje sea más adecuado para juegos modificables?
Respuestas:
Depende de cómo quieras diseñar tu sistema de modulación. Exploraré dos de ellos.
SDK
Lo más probable es que requiera que sus modders usen el mismo idioma que usted y carguen mods a través de la reflexión (o similar, según el idioma que elija). Obviamente, esto lo limitará a los lenguajes que pueden realizar enlaces tardíos, y hay muchos que pueden hacerlo (incluso C puede hacer enlaces tardíos con algunos
LoadLibrary
trucos ingeniosos ). Incluso podría hacer algunos meta-modding, donde un mod podría alojar otros mods (por ejemplo, mods con script).El primer problema con este enfoque es ocultar el estado interno. Tomando C # por ejemplo, un modder podría simplemente usar la reflexión para acceder a miembros privados, C también puede hacer esto (aunque se requiere más esfuerzo).
El segundo problema es el hosting. A la gente realmente no le gusta el código extranjero que se ejecuta en su sistema sin un entorno limitado. Como el peor de los casos, podría escribir un mod que configure una caja de semillas; Si se instaló en un ISP, podría dañar gravemente su reputación.
Scripting
Modders usaría un lenguaje como Lua para crear mods. Necesitaría un idioma que pudiera invocar código nativo (para interactuar con Lua); o tendría que escribir su propio lenguaje de secuencias de comandos en el idioma de su elección.
El primer problema aquí es que la mayoría de los lenguajes de secuencias de comandos se interpretan, lo que puede no ser aceptable para sistemas en tiempo real (aunque, vea LuaJIT); como los juegos
Irónicamente, el segundo problema todavía existe aquí; Tomando a Lua como ejemplo, me sentí extremadamente decepcionado porque tiene funciones de 'bombardeo' incluidas en la biblioteca principal / predeterminada, lo que lo hace completamente inútil como un entorno de espacio aislado (sin una gran cantidad de esfuerzo, suerte y mantenimiento), es difícil Describo lo enojado que estoy por esto, pero realmente espero que estén bebiendo algunos cócteles fuertes cuando incluyeron estas características . Obviamente, podría evitar esto fácilmente si desarrolla su propio lenguaje (consulte: UnrealScript).
Finalmente, el costo de interactuar con un motor de secuencias de comandos puede ser prohibitivo, tomando nuevamente a Lua como ejemplo, combinado con C #: C # tiene una sobrecarga considerable al invocar funciones nativas (a través de P / Invoke) y Lua es una API bastante 'conversadora'. Esto podría generar problemas si la forma en que diseña el 'SDK de script' requiere mucha conversación entre su idioma principal y su lenguaje de script (tenga en cuenta que C realmente no tiene este problema). Una vez más, podría esquivar esto escribiendo su propio lenguaje de secuencias de comandos (y en el caso de C # compilándolo en MSIL) y ejecutándolo de la manera más rápida en su entorno [virtual].
Debido a que el script se ejecuta esencialmente en un sistema completamente diferente a su código primario, puede controlar el acceso al estado interno por completo (a menos que hagan algunas cosas sofisticadas con las funciones de shell mencionadas anteriormente).
Conclusión
Hice veer un tema de bits, sin embargo, lo que básicamente se puede Garner de ese muro de texto es que usted debe ser capaz de hacer un juego modificable en cualquier idioma (me atrevería a decir que usted puede ) - pero en algunos idiomas puede llevar a más trabajo. ¿Soy un poco anal acerca de la seguridad? Sí, también debería serlo cuando se trata de código de usuario.
fuente
Diría que el lenguaje no es un factor decisivo aquí, es realmente lo flexible y basado en datos que haces tu juego lo que lo define.
Cada juego se ejecuta en un conjunto de datos (por ejemplo, desde niveles, mallas, configuraciones, elementos). La diferencia entre un juego normal y un juego modificable es que el último proporciona herramientas que permiten al usuario modificar los datos existentes (o agregar sus propios datos). Independientemente del idioma que elija, intente hacer que su juego sea lo más basado en datos posible y evite codificar cualquier contenido del juego. Prácticamente cualquier idioma que probablemente elija puede leer datos del disco, que es la mayoría de lo que necesita.
También está a la mitad del camino si solo crea las herramientas para su uso personal (por ejemplo, su propio editor de niveles) y luego las perfecciona y las comparte con sus usuarios. El editor de nivel Super Meat Boy fue más o menos eso, una versión mejorada de la herramienta utilizada durante el desarrollo del juego.
Y dependiendo del tipo de juego, es posible que desee permitir que los usuarios escriban algunos de los comportamientos del juego. En su caso, debe considerar incorporar un lenguaje de script en su juego desde el principio (ya sea el suyo o uno existente como Lua o Python, que son opciones populares). Esto también se incluye en la categoría de diseño basado en datos. Si decide utilizar un lenguaje de script existente, puede valer la pena verificar si el lenguaje de programación que elija tiene enlaces para ese lenguaje de script (generalmente en forma de bibliotecas de terceros).
fuente
El idioma que elijas realmente no determina cuán modificable es un juego, la forma en que usas el idioma es más importante.
Si la mayor parte de su juego se basa en datos (es decir, los datos del juego se definen en un archivo que se lee de su código), el juego puede ser muy modificable. Esto se puede hacer en casi cualquier idioma. El uso de un lenguaje de secuencias de comandos también facilita la modificación de un juego.
Sin embargo, eso no significa automáticamente que no usar esas cosas hace que sea imposible modificar un juego. Minecraft, por ejemplo, no es un juego muy modificable en absoluto, sin embargo, hay descompiladores bastante buenos disponibles para Java y una comunidad muy grande para Minecraft, por lo que se hicieron muchas herramientas para hacer que Minecraft sea modificable (varios cargadores de modulación, Bukkit). Con esas herramientas es posible modificar Minecraft (sin embargo, probablemente sean técnicamente ilegales en algunos países).
El mejor consejo que puedo darle es utilizar las herramientas que desea que usen los modders; Si define un NPC a partir de un archivo, se puede modificar, si lo usa en un caso especial en el código, probablemente no se pueda modificar.
fuente
Java es perfectamente adecuado para escribir un juego modificable.
Una vez dicho esto, la mejor manera de hacer que un juego sea modificable es adoptar un lenguaje dinámico que pueda integrarse en la aplicación más amplia y usarse para crear secuencias de comandos. Por lo general, desea un lenguaje dinámico porque el punto es poder interactuar con el código en tiempo de ejecución, sin pasar por un ciclo completo de compilación / compilación / prueba.
Algunas opciones de lenguaje dinámico a considerar:
fuente
Hay una manera más fácil de hacer esto en Java, aunque es un poco descuidado. Todo lo que tiene que hacer es tomar los archivos dot java en una carpeta y luego colocar este archivo por lotes con la carpeta, asígnele el nombre Ejecutar:
javac /src/.java Java / src /
Nota: puede agregar tantas clases como desee. Nota: en la última línea, asegúrese de NO colocar extensiones, también conocidas como .java, .exe, .bat, ect.
Básicamente, eso solo recompilará el código cada vez que se ejecute el juego, por lo que si la fuente del juego cambia, lo compilará y luego ejecutará el juego recién compilado ... Lamentablemente, no puede agregar mods de otras personas al juego.
fuente