Para los motores de juegos personalizados, ¿qué debo hacer si mis datos principales están mal formados o faltan?

27

Estoy escribiendo un motor personalizado para un juego. Empecé este juego mucho antes de entender por qué debería usar middleware, y está demasiado lejos para reescribirlo.

La gran mayoría de mis datos provienen de archivos externos, y no solo me refiero a los activos; Defino todos mis objetos de juego a través de .JSON. Pero, por desgracia, soy humano; ocasionalmente mis archivos de datos no son válidos, o cambio el formato, pero olvido actualizar el archivo, o el cargador en sí es defectuoso.

Si, por alguna razón, falla un intento de cargar algún tipo de activo en un motor personalizado, ¿qué opciones tengo?

Este no es un duplicado de ¿Cómo debo manejar los recursos faltantes? , ya que esa pregunta se trata de activos orientados al usuario, como modelos o texturas. Las malas texturas se pueden reemplazar con un tablero de ajedrez, los malos sonidos con silencio y los malos con "ERROR". Mi problema radica en los datos que son críticos para el juego incluso en ejecución, como niveles, definiciones de objetos del juego y diseños de GUI.

JesseTG
fuente
77
Yo uso un enfoque similar para mi juego. De hecho, construí una pequeña aplicación de utilidad para generar mis archivos de datos del juego para evitar errores humanos; de esta manera, solo puedo modificar los archivos si quiero hacer cambios sin tener que escribir 100,000 líneas de JSON manualmente.
JDSweetBeat
También puede ejecutar sus datos a través de un validador antes de cargarlos.
JDSweetBeat
Mi JSON es lo suficientemente pequeño que generarlo automáticamente sería inútil. Además, un validador no ayudará si falta el JSON, o si hay un error en lo que se supone que debe leerlo. Gracias por la idea, sin embargo.
JesseTG

Respuestas:

44

Registre un error y salga con gracia.

Idealmente, muestre un error legible por humanos en la pantalla también. Debe haber una tubería central de funcionalidad codificada que funcione sin estos archivos de datos. Es la misma tubería que carga los archivos de datos en primer lugar. Debería ser capaz de detectar cuándo estos archivos de datos centrales están dañados o de otra manera defectuosos y finalizar la aplicación. Si los usuarios están destinados a modificar estos archivos, no hay mucho más que se pueda hacer. De lo contrario, debe implementar una estrategia de prueba para garantizar que este tipo de corrupción no ocurra. Entonces puede asegurarse de que solo está lanzando archivos de datos válidos.

MichaelHouse
fuente
12

Byte56 mencionó una opción. Hay al menos otro:

Asuma los valores predeterminados y muestre una Advertencia.

Dependiendo de la naturaleza de sus datos, puede ser perfectamente aceptable asumir algunos valores predeterminados y advertir al usuario que "dado que el archivo xxx no se pudo cargar, estamos utilizando un objeto genérico aaa".

Pulpo
fuente
6

Depende de si esto sucede durante el desarrollo o lanzamiento.

Durante el desarrollo, tendrá todo tipo de cosas faltantes, errores y desordenes, constantemente, todo el tiempo, e incluso puede que desee "cargar" activos a pedido o reemplazar un activo mientras el juego se está ejecutando. Puede editar scripts con el juego en ejecución para probar que una IA funciona mejor o algo similar.

Es muy molesto si el programa muestra un cuadro de diálogo de error y sale cada vez, y debe reiniciarlo, lo que demora de 2 a 3 minutos. El objetivo en el desarrollo es detenerte (cuyo tiempo es el activo más preciado) lo menos posible.
Entonces, si, por ejemplo, falta una textura, querrá ver algo así como un tablero de ajedrez rojo-blanco, tal vez con la palabra "falta" escrita como una textura de reemplazo, por lo que es obvio de inmediato que algo es extraño. . Pero no quieres que el juego salga con gracia, ni que se bloquee. La información detallada sobre lo que falta en su archivo de registro es inmensamente útil.

Por otro lado, en un lanzamiento, el conjunto completo de archivos de activos idealmente [1] debería haber pasado por su canalización de activos automatizada. Esto no debe ser mucho más que un simple analizador que lee todos sus JSON y luego verifica que cada módulo sea consistente en sí mismo, y verifica que cada activo al que hace referencia esté realmente allí, y luego comprime todo el conjunto de archivos de alguna manera conocida (pero no necesariamente estándar) que sea fácil de leer para su motor, opcionalmente agregando algunas sumas de verificación.

Usted sabe que no puede haber fallas porque su canalización verificó que todo estaba allí antes de lanzar el paquete al usuario final. Entonces, si ocurre una falla, ha habido un error de transmisión o es más probable que el usuario esté tratando de hacer trampa. En cualquier caso, el programa debe mostrar un mensaje que dice que los archivos de activos están dañados y salir.

Alternativamente, puede ofrecer la opción de descargar una copia prístina de los activos de Internet (si tiene un servidor de descarga). Pero para evitar una pesadilla de atención al cliente, asegúrese de preguntar antes de descargar gigabytes de datos.


[1] La realidad puede parecer diferente, incluso puede encontrar activos faltantes en títulos AAA cuyos creadores "deberían saber", pero generalmente tienen plazos poco realistas y equipos grandes y cambiantes también. Idealmente, todo lo que envía ha pasado por la tubería automatizada y se garantiza que se completará.

Damon
fuente