Bartaz Temat założony przez niniejszego użytkownika |
SDL Kolizja działa tylko raz. » 2010-02-05 21:37:56 Witam mam taki problem,pisze sobie Ponga i mam w nim kolizje tylko ,że robi się ona tak ,że piłka odbije się od paletki potem odbije się od drugiej ale potem od pierwszej już się nie chce odbić, chyba coś pomieszałem z zmienna bool ale nie mogę się dowiedzieć co. Kod: #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 );
bool wyjscie = false; bool kolizja = false; bool kolizja1 = false; bool f = false; bool czy = false; 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" ); 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; 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; 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 ); if((( g > poz_y_kulki2 ) &&( g < poz_y_kulki1 ) &&( f < poz_x_linia ) ) ) { kolizja = true; } if( kolizja == true ) { f = f + 30; g = g - 1; } if((( g > poz_y_kul1 ) &&( g < poz_y_kul2 ) &&( f > poz_x_linia1 ) ) ) { kolizja1 = true; } if( kolizja1 == true ) { f = f - 30; } } 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; }
Kod odpowiedzialny za kolizje: if((( g > poz_y_kulki2 ) &&( g < poz_y_kulki1 ) &&( f < poz_x_linia ) ) ) { kolizja = true; }
if( kolizja == true ) { f = f + 30; g = g - 1; } if((( g > poz_y_kul1 ) &&( g < poz_y_kul2 ) &&( f > poz_x_linia1 ) ) ) { kolizja1 = true; } if( kolizja1 == true ) { f = f - 30; }
Zmienne bool: bool kolizja = false; bool kolizja1 = false;
|