Estoy cargando el archivo PNG (con algunos lugares transparentes) en mi aplicación SDL.SDL_image Error de transparencia PNG
buscar en Google sobre cómo hacer que me dio este ejemplo de código:
SDL_Surface *LoadImage(std::string filename)
{
SDL_Surface* loaded_image = 0, compatible_image = 0;
if (!filename.c_str())
return 0;
loaded_image = IMG_Load(filename.c_str());
if (!loaded_image)
return 0;
compatible_image = SDL_DisplayFormat(loaded_image);
SDL_FreeSurface(loaded_image);
return compatible_image;
}
Pero cuando se alcanza la línea compatible_image = SDL_DisplayFormat(loaded_image);
, la aplicación se detiene con una excepción inalcanzable (incluso try { /* ... */ } catch (...) { /* ... */ }
no ayuda). Reemplazar SDL_DisplayFormat()
con SDL_DisplayFormatAlpha()
tampoco ayudó. Por lo tanto, acaba de quitar las líneas de excepción-trowable y obtener el código de trabajo para cargar imágenes:
SDL_Surface *LoadImage(std::string filename)
{
if (!filename.c_str())
return 0;
return IMG_Load(filename.c_str());
}
y he encontrado tal cosa desagradable: cuando algunos sprites se solapa con piezas transparentes de otro, aparecen artefactos. Algo como esto:
Estoy animando a mi "héroe" con este sencillo algoritmo:
// SDL_Surface sprite = LoadImage("hero.bmp");
// hero.bmp contains animation frames followed one-by-one in a single line
// spriteFrameCnt is a number of animation frames
// spriteWidth and spriteHeight contain single frame params
SDL_Rect srcRect;
srcRect.x = spriteFrame * spriteWidth;
srcRect.w = spriteWidth;
srcRect.y = 0;
srcRect.h = spriteHeight;
spriteFrame = ++spriteFrame % spriteFrameCnt;
SDL_BlitSurface(sprite, &srcRect, screen, &rcSprite);
¿Cómo se puede explicar esto y se fija?
Sí, ahora no se lanza la excepción. Gracias a ti. Pero los artefactos no desaparecieron sin importar cómo intente ... – shybovycha