Witam. Pisząc podwaliny do pewnego projektu w bibliotece SDL natknąłem się na jeden ale ogromny dla mnie problem. Straciłem mnóstwo czasu aby go rozwiązać, lecz skończyło się to niepowodzeniem. Mianowicie podczas przemieszczania sprite'ów pozostaje, tzw. "AfterImage", czyli sprite wyświetla się na nowej pozycji lecz jest również pokazany na starej.
Poniżej prezentuję przykładowy kod z tym problemem:
#include <sdl.h>
SDL_Surface * ekran = NULL;
SDL_Surface * ss = NULL;
SDL_Rect s;
SDL_Event zdarzenie;
bool wyjscie = false;
Uint8 * keystate = SDL_GetKeyState( NULL );
int x = 0, y = 0;
int main (int argc, char * args[])
{
SDL_Init( SDL_INIT_EVERYTHING );
ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
ss = SDL_LoadBMP( "ss.bmp" );
SDL_WM_SetCaption( "SW", NULL );
SDL_BlitSurface( ss, NULL, ekran, NULL );
while( !wyjscie )
{
while( SDL_PollEvent( & zdarzenie ) )
{
if( zdarzenie.type == SDL_QUIT )
{
wyjscie = true;
}
}
if( keystate[ SDLK_RIGHT ] )
{
x++;
}
if( keystate[ SDLK_DOWN ] )
{
y++;
}
if( keystate[ SDLK_LEFT ] )
{
x--;
}
if( keystate[ SDLK_UP ] )
{
y--;
}
s.x = x;
s.y = y;
SDL_BlitSurface( ss, NULL, ekran, & s );
SDL_Flip( ekran );
}
SDL_Quit();
SDL_FreeSurface( ss );
return 0;
}
Tak wygląda sprite który przemieszczam:
Tak zaś wygląda okno po przemieszczeniu sprite'a:
Tutaj rodzi się pytanie, co powinienem zmienić w kodzie lub do niego dodać aby nie występował "afterimage"?
Dziękuję z góry za szybką odpowiedź.