2011-05-14 14 views
5

Si alguna vez usaste la herramienta Game Maker, es un poco así. Quiero ser capaz de tomar todos mis sonidos, imágenes y todo lo demás e incrustarlos en un solo ejecutable de C++. Game Maker tendría un editor incorporado, y tendría las imágenes incrustadas en el archivo .gmk, y cuando lo abrieras leería las imágenes y las mostraría en el juego. Estoy pensando que guardó las imágenes no como imágenes, sino como datos puros almacenados en el archivo .gmk e interpretados por el editor o por algún intérprete escrito en .exe. ¿Cómo podría hacer algo similar?¿Cómo incrustar recursos en un solo ejecutable?

Respuesta

2

El sistema de recursos de Windows funciona de esta manera, por lo que si hace una aplicación WinAPI o MFC, puede usar esto. Además, Qt proporciona la misma funcionalidad, pero de una manera independiente de la plataforma. Simplemente escriben los archivos en formato binario sin formato en una matriz de bytes en un archivo C++ normal, por lo que se compilan como datos en el archivo ejecutable. Luego brindan funciones para acceder a estos bloques de datos como archivos normales, aunque no sé cómo funcionan realmente. Probablemente una implementación especial de su clase de archivo que simplemente accede a esas variables de matriz de bytes.

+0

muy interesante. Supongo que es solo otra de esas cosas de Microsoft, como DirectX o WinAPI. Muy útil en funcionalidad, pero no en plataforma cruzada. Pero es bueno ver que QT tiene una funcionalidad similar. – Keelx

+0

MSDN's Using Resources (Windows): https://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx – Andrew

1

Para las imágenes solamente, un enfoque muy simple es usar el formato XPM.

Este formato es un encabezado C/C++ válido, por lo que puede incluirlo directamente en un archivo fuente C++ y usarlo directamente.

El problema principal con este enfoque es que XPM no es un formato comprimido, por lo que usa mucho almacenamiento. En consecuencia, en la práctica solo vi esto usado para iconos y pequeños objetos gráficos, pero en principio se podía hacer más.

La otra cosa interesante de XPM es que es legible por humanos, una vez más genial para diseñar iconos pequeños y simples.

Para generalizar esta idea a otros formatos, lo que podría hacer es crear una cadena de compilación que:

  1. codifica el archivo de destino como ASCII (Uuencode o tal)
  2. Resulta que en un solo nombre C Cadena en un archivo fuente.
  3. crear un encabezado acaba de declarar el nombre
  4. Definir una función de recuperación de la forma binaria de la cadena
Cuestiones relacionadas