Witam! Po kilku dniach zgłębiania SDL postanowilem zacząć pisać swoją pierwszą grę. Zrobiłem już jako taką mapkę, dlatego następnym moim krokiem był rzecz jasna główny bohater. No i tutaj pojawił się problem. Dodałem nową bitmapę, napisałem proste sterowanie nią, lecz podczas poruszania się (po wcisnieciu klawiszy), bitmapa ludzik nadpisuje mi poprzednie. Tworzy się wtedy piękny wąż zrobiony z głównego bohatera. Czy ktoś wie jakbym mógł temu zapobiec? Jako, że nieczęsto mam dostęp do internetu, zamieszczam kod źródłowy poniżej. Z góry dzięki!
#include <SDL.h>
SDL_Surface * ekran = NULL;
SDL_Surface * obrazek = NULL;
SDL_Surface * ludzik = NULL;
SDL_Event zdarzenie;
SDL_Rect dest;
SDL_Rect sprst[ 2 ];
SDL_Rect dprst[ 192 ];
Uint8 * klawisz = SDL_GetKeyState( NULL );
int i, k, l;
int kafelka = 0;
int ludzik_x = 100, ludzik_y = 100;
bool exit = false;
int mapa[12][16] = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
void rysuj()
{
sprst[0].x = 0; sprst[0].y = 0; sprst[0].w = 50; sprst[0].h = 50; //obrazek 1
sprst[1].x = 50; sprst[1].y = 0; sprst[1].w = 50; sprst[1].h = 50; // obrazek 2
for( i = 0; i < 12; i=i+1)
for( k = 0; k <16; k=k+1)
{
dprst[kafelka].x = k*50;
dprst[kafelka].y = i*50;
if(mapa[i][k] == 1) SDL_BlitSurface( obrazek, & sprst[ 1 ], ekran, & dprst[ kafelka ] );
else if(mapa[i][k] == 0) SDL_BlitSurface( obrazek, & sprst[ 0 ], ekran, & dprst[ kafelka ] );
kafelka=kafelka+1;
}
}
void chodz()
{
}
int main( int argc, char * args[] )
{
SDL_Init( SDL_INIT_EVERYTHING);
ekran = SDL_SetVideoMode( 800, 600, 32, SDL_SWSURFACE );
obrazek = SDL_LoadBMP("obrazek.bmp");
ludzik = SDL_LoadBMP("ludzik.bmp");
rysuj();
//SDL_Flip( ekran );
while( !exit )
{
while( SDL_PollEvent( & zdarzenie ) )
{
if( klawisz[SDLK_ESCAPE]) exit = true;
if( klawisz[SDLK_UP]) ludzik_y=ludzik_y-50;
if( klawisz[SDLK_DOWN]) ludzik_y=ludzik_y+50;
if( klawisz[SDLK_LEFT]) ludzik_x=ludzik_x-50;
if( klawisz[SDLK_RIGHT]) ludzik_x=ludzik_x+50;
}
dest.x = ludzik_x;
dest.y = ludzik_y;
SDL_BlitSurface(ludzik, NULL, ekran, &dest);
SDL_Flip( ekran );
}
SDL_Quit();
SDL_FreeSurface( obrazek );
return 0;
}
}