Pregunta

Estoy trabajando en un juego Roguelike simple y usando SDL como pantalla. Los gráficos para el juego son una imagen de Codepage 437, con el fondo negro y la fuente blanca. En lugar de usar muchos archivos de imagen separados que ya están coloreados, quiero usar un archivo de imagen y reemplazar los colores cuando se está cargando en la memoria.

El código para dividir la etiqueta de códigos en una hoja de sprites funciona correctamente, pero al intentar imprimir en color, todo sale en blanco. Lo tuve trabajando en el pasado, pero de alguna manera rompí el código al cambiarlo de cambiar el color en la impresión, para cambiar el color en la carga. Aquí está el código para cargar la imagen:

SDL_Surface *Screen,*Font[2];
SDL_Rect Character[256];

Uint8 ScreenY,ScreenX;
Uint16 PrintX,PrintY,ScreenSizeY,ScreenSizeX;
Uint32 Color[2];

void InitDisplay()
{
    if(SDL_Init(SDL_INIT_VIDEO) == -1) { printf("SDL Init failed\n"); return; }

    ScreenSizeY = 600;
    ScreenSizeX = 800;
    Screen = SDL_SetVideoMode(ScreenSizeX,ScreenSizeY,32,SDL_HWSURFACE | SDL_RESIZABLE);
    SDL_WM_SetCaption("Alpha",NULL);

    SDL_Surface *Load;
    Load = IMG_Load("resource/font.png");
    Font[0] = SDL_DisplayFormat(Load);
    SDL_FreeSurface(Load);

    Color[0] = SDL_MapRGB(Font[0]->format,255,255,255);
    Color[1] = SDL_MapRGB(Font[0]->format,255,0,0);

    Uint8 i,j,k = 0;

    PrintX = 0;
    PrintY = 0;

    for(i = 0; i < 16; i++) { for(j = 0; j < 16; j++)
    {
        Character[k].x = PrintX;
        Character[k].y = PrintY;
        Character[k].w = 8;
        Character[k].h = 12;
        k++;
        PrintX += 8;
    } PrintX = 0; PrintY += 12; }

    PrintX = 0;
    PrintY = 0;

    for(i = 1; i < 2; i++)
    {
        Font[i] = SDL_DisplayFormat(Font[0]);
        SDL_SetColorKey(Font[i],SDL_SRCCOLORKEY,Color[i]);
        SDL_FillRect(Font[i],&Font[i]->clip_rect,Color[i]);
        SDL_BlitSurface(Font[0],NULL,Font[i],NULL);
        SDL_SetColorKey(Font[0],0,Color[0]);
    }
}

El problema es con el último bucle de arriba. No puedo entender por qué no está funcionando. ¡Cualquier ayuda es muy apreciada!

¿Fue útil?

Solución

Resolví este hace un tiempo. El problema surgió de hacer la tecla de color en el orden incorrecto. Aquí está el código resuelto:

uint8_t i;
uint8_t j;
uint8_t k = 0;

SDL_FillRect(Screen,NULL,0x00000000);

SDL_Rect Offset;
SDL_Surface *Load;
SDL_Surface *LoadFont;

Load = IMG_Load("resource/font.png");
LoadFont = SDL_DisplayFormat(Load);
SDL_FreeSurface(Load);

Offset.x = 0;
Offset.y = 0;

for(i = 0; i < 16; i++) { for(j = 0; j < 16; j++)
{
    Character[k].x = Offset.x;
    Character[k].y = Offset.y;
    Character[k].w = XWIDTH;
    Character[k].h = YHIEGHT;
    k++;
    Offset.x += XWIDTH;
} Offset.x = 0; Offset.y += 12; }

Color[0][0] = SDL_MapRGB(LoadFont->format,255,255,255);
Color[0][1] = SDL_MapRGB(LoadFont->format,96,96,96);
Color[1][0] = SDL_MapRGB(LoadFont->format,255,0,0);
Color[1][1] = SDL_MapRGB(LoadFont->format,96,0,0);
Color[2][0] = SDL_MapRGB(LoadFont->format,0,255,0);
Color[2][1] = SDL_MapRGB(LoadFont->format,0,96,0);
Color[3][0] = SDL_MapRGB(LoadFont->format,0,0,255);
Color[3][1] = SDL_MapRGB(LoadFont->format,0,0,96);
Color[4][0] = SDL_MapRGB(LoadFont->format,255,255,0);
Color[4][1] = SDL_MapRGB(LoadFont->format,96,96,0);

SDL_SetColorKey(LoadFont,SDL_SRCCOLORKEY,Color[0][0]);

for(i=0; i<6; i++) { for(j=0; j<2; j++)
{
    Font[i][j] = SDL_DisplayFormat(LoadFont);
    SDL_FillRect(Font[i][j],&Font[i][j]->clip_rect,Color[i][j]);
    SDL_BlitSurface(LoadFont,NULL,Font[i][j],NULL);
    SDL_SetColorKey(Font[i][j],SDL_SRCCOLORKEY,SDL_MapRGB(Font[i][j]->format,0,0,0));
}}

SDL_FreeSurface(LoadFont);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top