मैं अपने एसडीएल आवेदन में PNG फ़ाइल (कुछ पारदर्शी स्थानों के साथ) लोड हो रहा है कर रहा हूँ। यह मेरे लिए कैसे इस कोड नमूने के साथ प्रदान की क्या करने परSDL_image पीएनजी पारदर्शिता त्रुटि
Googling:
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;
}
लेकिन जब लाइन compatible_image = SDL_DisplayFormat(loaded_image);
तक पहुँच जाता है, आवेदन एक uncatchable अपवाद के साथ रुकती है (यहां तक कि try { /* ... */ } catch (...) { /* ... */ }
मदद नहीं करता है)। SDL_DisplayFormat()
को SDL_DisplayFormatAlpha()
के साथ बदलने में भी मदद नहीं मिली। तो, मैं सिर्फ अपवाद-trowable लाइनों को हटा दिया है और इस कोड छवियों को लोड करने के लिए काम करना आरंभ:
SDL_Surface *LoadImage(std::string filename)
{
if (!filename.c_str())
return 0;
return IMG_Load(filename.c_str());
}
और मैं इस तरह के अप्रिय बात मिल गया है: जब कुछ स्प्राइट एक दूसरे के पारदर्शी टुकड़े के साथ ओवरलैप हो, कलाकृतियों दिखाई देते हैं। कुछ इस तरह:
मैं इस सरल एल्गोरिथ्म के साथ मेरी "हीरो" एनिमेट कर रहा हूँ:
// 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);
यह कैसे समझाया और उन्हें ठीक कर सकते हैं?
हाँ, अब अपवाद throwed नहीं है। आपका धन्यवाद। लेकिन कलाकृतियों को दूर नहीं किया गया कोई फर्क नहीं पड़ता कि मैं कैसे कोशिश करता हूं ... – shybovycha