¿Cómo empacas los recursos en un juego cuando tienes demasiados?

10

Recientemente hice un clon básico de Space Invaders, en C ++, usando el marco Allegro 5. Cuando terminé, me di cuenta de que tenía unos 10 sprites y 13 MB de DLL; algunos de los jugadores ni siquiera tenían las DLL mingW, lo que hacía que el juego fuera muy confuso.

¿Cómo empaqueto todos mis recursos de una manera que pueda agregar y eliminar datos fácilmente a mi juego, y reducir el tamaño tomado por el recurso, básicamente colocándolos en un solo lugar? Estoy usando codeblocks.

Bugster
fuente
1
¿Cómo entiendes el término recursos? Activos como imágenes, sonidos, ... ¿o incluye archivos DLL en este término?
Christian Ivicevic
Preferiría que también pudiera ajustar archivos DLL porque tengo muchos de esos.
Bugster
Mi primera idea sería encontrar una biblioteca adecuada como la (bastante desactualizada ...) zziplibpara almacenar todos mis activos habituales en un archivo zip y luego cargarlos en mi juego a través de una tubería de contenido personalizada para el motor. Lo que básicamente buscas al principio es una forma de cargar archivos desde un archivo zip a la memoria para poder usarlos en tu juego. En cuanto a los dlls, es bastante difícil porque generalmente tienen que estar en el mismo directorio que el ejecutable o el directorio Windowso ¡lo System32cual NO se recomienda! ¿Qué tal un archivo SFX para extraer TEMPy ejecutar desde allí?
Christian Ivicevic
3
¿Estás preguntando cómo usar un instalador? Porque las DLL no son recursos.
Nicol Bolas

Respuestas:

13

Parece que hay dos desafíos que enfrenta aquí: distribución y empaquetado de activos.

Distribución

Empaquete toda su aplicación en directorios como mejor le parezca, luego coloque el directorio de nivel superior en un archivo .zip. Distribuya ese archivo .zip. Cuando los usuarios extraigan el archivo zip, tendrán una carpeta con todo lo que necesitan listo para ejecutar el juego.

¿Cómo colocas tus archivos?

  • Por lo general, sus archivos .dlls deben estar en el mismo directorio que el ejecutable (hay excepciones, pero en aras de la simplicidad ...)
  • Sus activos (imágenes, audio) pueden estar donde los desee, aunque si los mueve en referencia a su ejecutable, tendrá que modificar su código de carga de recursos para tener esto en cuenta.

Usualmente hago algo como esto:

MyGame \ // el directorio de nivel superior contiene todo el programa
  bin \ // dlls van aquí junto con el exe compilado
  res \ // directorio de nivel superior de recursos del juego
    música\
    efectos de sonido\   
    voz\
  cfg \ // archivos de configuración predeterminados (las configuraciones de usuario van en el directorio de usuarios)
  MyGame.lnk // acceso directo a exe compilado

Embalaje de activos

Puede usar algún tipo de biblioteca de compresión (zlib, lzo) para comprimir todos los recursos del juego (el directorio res \ anterior) en un solo archivo. Luego, debe usar la misma biblioteca de compresión para extraer el contenido de sus recursos, en tiempo real, para cargar sus activos en su juego.

Entonces, ¿qué sucede cuando quieres parchear tus activos? Luego tiene que: compilar un archivo de activos completamente nuevo y distribuirlo a sus usuarios (para que esencialmente vuelvan a descargar lo que ya tienen, más un puñado de adiciones), o tenga que construir un actualizador (otro programa para mantener ) y lidiar con el hecho de que las cosas pueden salir mal y su archivo de activos se corromperá ...

Honestamente, no es exactamente trivial hacer que funcione y no veo la recompensa en su situación. Un directorio simple debería ser suficiente para encapsular sus 10 sprites y es mucho más fácil agregar y parchear cosas: solo necesita descargarlos en el directorio correcto y listo.

Construyendo un instalador

Esto supone que está apuntando a Windows ... una vez que tenga lo anterior abajo, puede trabajar en la construcción de un instalador para su juego. Evitaría a toda costa los métodos ClickOnce que admite Visual Studio. Es no es el típico programa de instalación de Windows y viene con su propio conjunto de peculiaridades.

Eche un vistazo a esta pregunta de StackOverflow : contiene un conjunto de enlaces útiles a paquetes de instalador que puede usar. A mucha gente en estos días parece gustarle WiX . Nunca lo he usado yo mismo. Además, AdvancedInstaller e InnoSetup son opciones populares.

Cifrar
fuente
1
Gracias por esta respuesta, ahora tengo una idea básica de cómo debo distribuir mi juego.
Bugster
1
No uses WiX. Te hará daño en la cabeza y matará a tu familia.
Ray Dey
1
Hay otra opción: puede haber más de un paquete de activos. Algo así como "resources.pak, patch1.pak, patch1337.pak, .." sería una forma de almacenar datos de parches. No habría necesidad de modificar el paquete original, solo hacer que el motor sea capaz de detectar y ordenar paquetes de parches.
serpiente5
0

Es posible que pueda vincular estáticamente algunas de las bibliotecas en lugar de incluir las dll. Sin embargo, si y cómo es diferente para cada biblioteca.

Matthew R
fuente
-1

Puede usar un software como Enigma para empaquetar sus archivos y guardarlos en un único .dat. Tendría que cambiar la carpeta de su lanzador.

Dev
fuente