Tôi đang tải tệp PNG (với một số vị trí trong suốt) vào ứng dụng SDL của mình.Lỗi trong suốt SDL_image PNG
Googling về cách để làm điều đó cung cấp cho tôi với mẫu mã này:
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;
}
Nhưng khi dòng compatible_image = SDL_DisplayFormat(loaded_image);
được đạt tới, ứng dụng ngừng với một ngoại lệ uncatchable (thậm chí try { /* ... */ } catch (...) { /* ... */ }
không giúp). Thay thế SDL_DisplayFormat()
bằng SDL_DisplayFormatAlpha()
cũng không giúp ích gì. Vì vậy, tôi chỉ cần loại bỏ các dòng ngoại lệ trowable và nhận được mã này làm việc để tải hình ảnh:
SDL_Surface *LoadImage(std::string filename)
{
if (!filename.c_str())
return 0;
return IMG_Load(filename.c_str());
}
Và tôi đã tìm thấy điều khó chịu như vậy: khi một số ma trùng lặp với phần minh bạch với nhau, hiện vật xuất hiện. Một cái gì đó như thế này:
Tôi sinh động của tôi "anh hùng" với thuật toán đơn giản này:
// 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);
Làm thế nào điều này có thể được giải thích và cố định?
Vâng, bây giờ ngoại lệ không được ném. Cảm ơn bạn. Nhưng hiện vật đã không biến mất bất kể tôi thử như thế nào ... – shybovycha