Next Temat założony przez niniejszego użytkownika |
[SDL] Zamazywanie tła przy przesuwaniu postaci. » 2010-03-08 18:31:06 Ok napisałem taki prosty kod w bibliotece SDL(ruszający się sprite) #include<SDL.h>
SDL_Surface * player = NULL; SDL_Surface * bg = NULL; SDL_Surface * screen = NULL;
SDL_Event Event;
Uint8 * keystate = SDL_GetKeyState( NULL );
SDL_Rect playerDest;
const int W = 800; const int H = 600; const int BPP = 32;
bool Quit = false; int x, y;
int main( int argc, char * args[] ) { SDL_Init( SDL_INIT_EVERYTHING ); screen = SDL_SetVideoMode( W, H, BPP, SDL_SWSURFACE ); bg = SDL_LoadBMP( "bg.bmp" ); player = SDL_LoadBMP( "player.bmp" ); Uint32 colorkey = SDL_MapRGB( player->format, 0x00, 0x00, 0x00 ); SDL_SetColorKey( player, SDL_SRCCOLORKEY, colorkey ); SDL_BlitSurface( bg, NULL, screen, NULL ); SDL_Flip( screen ); while( !Quit ) { while( SDL_PollEvent( & Event ) ) { if( Event.type == SDL_QUIT ) { Quit = true; } } if( keystate[ SDLK_RIGHT ] ) { x++; } if( keystate[ SDLK_LEFT ] ) { x--; } if( keystate[ SDLK_DOWN ] ) { y++; } if( keystate[ SDLK_UP ] ) { y--; } playerDest.x = x; playerDest.y = y; SDL_BlitSurface( player, NULL, screen, & playerDest ); SDL_Flip( screen ); } SDL_Quit(); SDL_FreeSurface( bg ); SDL_FreeSurface( player ); return 0; } i teraz tak jak nim poruszam to ciągle się rysuje jak narysować ten teren od nowa co przebył mam nadzieje że mnie zrozumieliście. #pixelmaster: zmieniłem tytuł |
|
Bartaz |
... » 2010-03-08 18:40:53 Chodzi ci oto ze zamazuje swoim tlem inne tlo? |
|
Next Temat założony przez niniejszego użytkownika |
» 2010-03-08 18:51:56 Właśnie tak |
|
Bartaz |
... » 2010-03-08 19:00:05 Tez kiedys mialem ten problem ale nie pamietam jak go rozwiazalem znaczy forumowicze poczekaj to moze znajde ten temat na forum. |
|
Bartaz |
... » 2010-03-08 19:05:50 |
|
Bartaz |
... » 2010-03-08 19:07:55 Sory to nie to xD |
|
Next Temat założony przez niniejszego użytkownika |
» 2010-03-10 15:36:24 Proszę o pomoc |
|
Bartaz |
... » 2010-03-10 16:25:07 Kiedys pisalem sobie Ponga w SDL'u (nie dokonczony...) i tlo sie nie zamazuje ale sam nie wiem dlaczego masz tu kod moze cos znajdziesz w nim. #include <SDL/SDL.h> SDL_Surface * paletka1 = NULL; SDL_Surface * paletka2 = NULL; SDL_Surface * tlo = NULL; SDL_Surface * ekran = NULL; SDL_Surface * pilka = NULL; SDL_Surface * kulka1 = NULL; SDL_Surface * kulka2 = NULL; SDL_Surface * linia = NULL; SDL_Surface * kul1 = NULL; SDL_Surface * kul2 = NULL; SDL_Surface * linja1 = NULL; SDL_Rect LudekDestination; SDL_Rect Paletka1Destination; SDL_Rect Paletka2Destination; SDL_Rect TloDestination; SDL_Rect PilkaDestination; SDL_Rect Kulka1Destination; SDL_Rect Kulka2Destination; SDL_Rect LiniaDestination; SDL_Rect Kul1Destination; SDL_Rect Kul2Destination; SDL_Rect Linja1Destination; SDL_Event zdarzenie; Uint8 * keystate = SDL_GetKeyState( NULL );
int x = 70, y = 70; int e = 900, r = 500; int a = 0, s = 0; int f = 327, g = 300; int poz_x_kulki1 = 100, poz_y_kulki1 = 250; int poz_x_kulki2 = 100, poz_y_kulki2 = 100; int poz_x_linia = 130, poz_y_linia = 50; int poz_x_kul1 = 930, poz_y_kul1 = 530; int poz_x_kul2 = 930, poz_y_kul2 = 670; int poz_x_linia1 = 900, poz_y_linia1 = 70; bool wyjscie = false; bool kolizja = false; bool kolizja1 = false; void kol() { if((( g > poz_y_kulki2 ) &&( g < poz_y_kulki1 ) &&( f < poz_x_linia ) ) ) { f = f + 70; } if((( g > poz_y_kul1 ) &&( g < poz_y_kul2 ) &&( f > poz_x_linia1 ) ) ) { f = f - 70; } }; int main( int argc, char * args[] ) { ekran = SDL_SetVideoMode( 1027, 768, 32, SDL_SWSURFACE ); tlo = SDL_LoadBMP( "Grafika/Tlo.bmp" ); paletka1 = SDL_LoadBMP( "Grafika/Paletka1.bmp" ); paletka2 = SDL_LoadBMP( "Grafika/Paletka2.bmp" ); pilka = SDL_LoadBMP( "Grafika/pilka.bmp" ); kulka1 = SDL_LoadBMP( "Grafika/kulka1.bmp" ); kulka2 = SDL_LoadBMP( "Grafika/kulka2.bmp" ); linia = SDL_LoadBMP( "Grafika/linia.bmp" ); kul1 = SDL_LoadBMP( "Grafika/kul1.bmp" ); kul2 = SDL_LoadBMP( "Grafika/kul2.bmp" ); linja1 = SDL_LoadBMP( "Grafika/linia1.bmp" ); SDL_SetColorKey( paletka1, SDL_SRCCOLORKEY, SDL_MapRGB( paletka1->format, 255, 0, 255 ) ); SDL_SetColorKey( paletka2, SDL_SRCCOLORKEY, SDL_MapRGB( paletka2->format, 255, 0, 255 ) ); SDL_SetColorKey( pilka, SDL_SRCCOLORKEY, SDL_MapRGB( pilka->format, 255, 0, 255 ) ); SDL_SetColorKey( linia, SDL_SRCCOLORKEY, SDL_MapRGB( linia->format, 255, 0, 255 ) ); SDL_SetColorKey( kulka1, SDL_SRCCOLORKEY, SDL_MapRGB( kulka1->format, 255, 0, 255 ) ); SDL_SetColorKey( kulka2, SDL_SRCCOLORKEY, SDL_MapRGB( kulka2->format, 255, 0, 255 ) ); while( !wyjscie ) { f = f - 17; kol(); while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) { wyjscie = true; } } if( keystate[ SDLK_UP ] ) { poz_y_kul1 = poz_y_kul1 - 30; poz_y_kul2 = poz_y_kul2 - 30; r = r - 30; } if( keystate[ SDLK_DOWN ] ) { r = r + 30; poz_y_kul1 = poz_y_kul1 + 30; poz_y_kul2 = poz_y_kul2 + 30; } if( keystate[ SDLK_w ] ) { y = y - 37; poz_y_kulki2 = poz_y_kulki2 - 37; poz_y_kulki1 = poz_y_kulki1 - 37; } if( keystate[ SDLK_s ] ) { y = y + 37; poz_y_kulki2 = poz_y_kulki2 + 37; poz_y_kulki1 = poz_y_kulki1 + 37; } Paletka1Destination.x = x; Paletka1Destination.y = y; Paletka2Destination.x = e; Paletka2Destination.y = r; TloDestination.x = a; TloDestination.y = s; PilkaDestination.x = f; PilkaDestination.y = g; Kulka2Destination.x = poz_x_kulki2; Kulka2Destination.y = poz_y_kulki2; Kulka1Destination.x = poz_x_kulki1; Kulka1Destination.y = poz_y_kulki1; LiniaDestination.x = poz_x_linia; LiniaDestination.y = poz_y_linia; Kul1Destination.x = poz_x_kul1; Kul1Destination.y = poz_y_kul1; Kul2Destination.x = poz_x_kul2; Kul2Destination.y = poz_y_kul2; Linja1Destination.x = poz_x_linia1; Linja1Destination.y = poz_y_linia1; SDL_BlitSurface( tlo, NULL, ekran, & TloDestination ); SDL_BlitSurface( paletka1, NULL, ekran, & Paletka1Destination ); SDL_BlitSurface( paletka2, NULL, ekran, & Paletka2Destination ); SDL_BlitSurface( pilka, NULL, ekran, & PilkaDestination ); SDL_BlitSurface( kulka2, NULL, ekran, & Kulka2Destination ); SDL_BlitSurface( kulka1, NULL, ekran, & Kulka1Destination ); SDL_BlitSurface( linia, NULL, ekran, & LiniaDestination ); SDL_BlitSurface( kul1, NULL, ekran, & Kul1Destination ); SDL_BlitSurface( kul2, NULL, ekran, & Kul2Destination ); SDL_BlitSurface( linja1, NULL, ekran, & Linja1Destination ); SDL_Flip( ekran ); SDL_Flip( paletka1 ); SDL_Flip( paletka2 ); SDL_Flip( pilka ); } SDL_FreeSurface( paletka1 ); SDL_FreeSurface( paletka2 ); SDL_FreeSurface( kulka1 ); SDL_FreeSurface( kulka2 ); SDL_FreeSurface( tlo ); SDL_FreeSurface( linia ); SDL_FreeSurface( linja1 ); SDL_Quit(); return 0; }
|
|
« 1 » 2 |