Aventuras en Megadrive: Tiles a partir de imágenes (III)
Cargar varias imágenes en memoria
Vamos a ver qué debemos hacer para cargar más de una imagen en memoria. Como ejemplo vamos a cargar la imagen de la luna y la imagen de los cuadrados. Es muy sencillo y es *casi* repetir lo que ya sabemos.
Clona el proyecto anterior. Copia ambas imágenes en la carpeta res.
Ahora modifica el archivo RES así:
IMAGE block "moon.png" 0 IMAGE block2 "my64tiles.png" 0
Como ves, las imágenes serán referenciadas como block y block2.
Ahora modifica el main.c así:
#include <genesis.h> #include "resources.h" int main() { //para llevar la cuenta de tiles en VRAM u16 ind; //recoge las paletas de cada imagen VDP_setPalette(PAL0, block.palette->data); VDP_setPalette(PAL1, block2.palette->data); //Tiles en VRAM desde la 2a pos (1er tile para pintar el fondo) ind = 1; //carga las imagenes en VRAM e incrementa ind VDP_drawImageEx(PLAN_A, &block , TILE_ATTR_FULL(PAL0, 0, 0, 0, ind), 3, 3, 1, CPU); ind += block.tileset->numTile; VDP_drawImageEx(PLAN_B, &block2 , TILE_ATTR_FULL(PAL1, 0, 0, 0, ind), 15, 15, 1, CPU); ind += block2.tileset->numTile; while(1) { VDP_waitVSync(); } return 0; }
Inspeccionemos la memoria (en GensKmod: CPU / Debug / Genesis / VDP).
Por defecto sale seleccionada la primera paleta (flechita roja). Se ven las tiles de la luna perfectamente. Sin embargo aparentemente no se ven (o no se ven muy bien) las tiles de la imagen de cuadraditos.
Esto es así porque ha coincidido que las tiles de cuadraditos, con la paleta de la luna, salen muy oscuros. Y por defecto el debugger selecciona y muestra todas las tiles de la VRAM con la primera paleta.
Nada que no tenga solución. Pincha en la segunda paleta, la flechita roja apuntará a la paleta y ahora todas las tiles se muestran con dicha paleta.
Ya se ven perfectamente las dos tiles de la segunda imagen. Verás unos puntitos blancos en los tiles de la luna, no es porque ambas paletas tengan el blanco. Eso son los píxels de los tiles de la luna que tienen el tercer color de paleta, que es blanco, en la paleta de la segunda imagen, verde oscuro en la primera.
No tiene mayor importancia. Pero quería aclararlo porque da lugar a confusión.
Como se puede comprobar, los tiles de la segunda imagen aparecen a continuación de los tiles de la primera imagen. Para eso usamos ind.
TIPOS DE ARCHIVO ADMITIDOS
Para imágenes, podemos usar bitmaps o PNGs (a mi los bitmaps me han dado problemas con esta versión de SGDK, recomiendo usar PNGs).
Para comprobar la profundidad de color, en Windows lo podemos ver en las propiedades del archivo:
Es recomendable usar un programa de dibujo que trabaje con paletas de colores.
La imagen debe ser un PNG sin canal de transparencia.
Todo esto lo veremos más ampliado en una futura entrada.
GITHUB
El código de esta lección, y de todas las demás, lo podrás encontrar en mi github: