Mam tuhle sprite, ktera ma vlastne zatim jen tri clenske promenne (sirka, vyska a bitmapa, coz je vlastne SDL_Surface). K ruznym objektum budu potom prirazovat tyto sprity a vykreslovat je podle toho. Problem je v tom, ze mi nejak moc nefunguje moje funkce drawSprite:
void graphics::drawSprite(sprite graphic, int x, int y)
{
SDL_Rect srcRect;
srcRect.x = 0;
srcRect.y = 0;
srcRect.w = graphic.width;
srcRect.h = graphic.height;
SDL_Rect dstRect;
dstRect.x = x-graphic.width/2;
dstRect.y = y-graphic.height/2;
dstRect.w = graphic.width;
dstRect.h = graphic.height;
SDL_BlitSurface(graphic.bitmap, &srcRect, m_screen, &dstRect);
return;
}
Volam ji treba takhle:g_graphics->drawSprite(player_sprite, 150, 180);
Graphic je ta sprite, x a y jsou souradnice kam se to ma vykreslovat.
Problem je v tom, ze pri prvnim pruchodu gameloopem (kery uz jsem v ramci hledani chyby orezal JEN na jedno volani tehle funkce) je vse v poradku, pri druhem se to ale zasekne a je to v ******.
Pomoci debuggeru jsem prisel na to, ze chyba je prave nekde v te drawSprite. Ona totiz nejakym zpusobem pokazi tu SDL_Surface, ktera obsahuje ta data.
Vypada to asi tak, ze az do toho "return" (pri prvnim pruchodu) je vsechno v pohode. Kdyz si dam na nej breakpoint a podivam se do te struktury, tak je vporadku. Tesne po tom returnu (tj. kdyz si dam breakpoint na prikaz nasledujici hned po zavolani te drawSprite) uz ta struktura obsahuje same nesmyslne udaje. Tady je to videt:
- bitmap 0x003a2ec8 {flags=3801704 format=0x003a0268 w=-17891602 ...} SDL_Surface *
Hodnota flags 3801704 nebo w -17891602 jsou samozrejme picoviny a naprosto to nechapu - kde se to tam bere? Vzdyt ta funkce tu spritu vubec zadnym zpusobem nemeni!??
Ten return tam samozrejme byt nemusi, mam ho tam jen abych si mohl hodit breakpoint jeste mezi ten blit a konec funkce.
Diky