Bartaz Temat założony przez niniejszego użytkownika |
SDL Problem z kolizją » 2010-02-02 14:27:07 Witam mam problem nie mogę za nic wymyślić kolizji do Ponga(A próbowałem) Ma ktoś jakis pomysł? 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_Event zdarzenie; SDL_Rect LudekDestination; SDL_Rect Paletka1Destination; SDL_Rect Paletka2Destination; SDL_Rect TloDestination; SDL_Rect PilkaDestination;
Uint8 * keystate = SDL_GetKeyState( NULL ); int x = 70, y = 300; int e = 900, r = 500; int a = 0, s = 0; int f = 300, g = 100;
bool wyjscie = 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" ); while( !wyjscie ) { while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) { wyjscie = true; } } if( keystate[ SDLK_UP ] ) { f = f + 37; r = r - 37; } if( keystate[ SDLK_DOWN ] ) { r = r + 27; } if( keystate[ SDLK_w ] ) { y = y - 37; } if( keystate[ SDLK_s ] ) { y = y + 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; 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_BlitSurface( tlo, NULL, ekran, & TloDestination ); SDL_BlitSurface( paletka1, NULL, ekran, & Paletka1Destination ); SDL_BlitSurface( paletka2, NULL, ekran, & Paletka2Destination ); SDL_BlitSurface( pilka, NULL, ekran, & PilkaDestination ); SDL_Flip( ekran ); } SDL_FreeSurface( paletka1 ); SDL_FreeSurface( paletka2 ); SDL_FreeSurface( tlo ); SDL_Quit(); return 0; }
A tu screen jak narazie to wygląda. http://img716.imageshack.us/img716/1553/beztytuubi.pngEDIT/////////// Właśnie znalazłem na jakimś forum takie coś oto cytat: "SDL posiada bibliotekę kolizji i nazywa się "sdl_collide" Ale nie mogę znaleść za bardzo o niej po Polsku czy ktoś może wie jak tego używać? |
|
DejaVu |
» 2010-02-02 16:25:32 |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-02-02 16:36:04 Przetłumaczyło mi to Google ale bezsensu. Nadal nie mam pojęcia jak tego użyć :( Tam jest chyba tylko kolizja na okregach(chyba). |
|
WunM |
» 2010-02-02 16:46:09 Nie wiesz? SDL_Surface * a positioned at( 104, 600 ) SDL_Surface * b positioned at( 708, 256 )
if( SDL_CollideBoundingBox( a, 104, 600, b, 708, 256 ) )
Ten (i inne) listing tłumaczy wszystko. |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-02-02 16:56:41 Mi jakos nie wytłumaczyło. |
|
kamillo121 |
» 2010-02-02 17:08:57 Jak Ci trzeba , to można przecież zrobić prostą i jedna funkcję do kolizji która przyjmuje dwa SDL_Rect'y i po trudzie , 4 warunki i funkcja do wykrywania kolizji jest(co prawda nie najlepsza ale jest ;]) . //A i jeszcze jedno, tam gdzie "usuwasz" tło to rób to przed pętlą a nie za każdym obiegiem pętli . // SDL_SetColorKey // |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-02-02 17:26:52 Zrobiłem sobie taką kolicje tylko nie wiem czy to ma szanse wogólóle działać: Pierw obrazek: http://img211.imageshack.us/img211/4850/obrazek.pngI działalo by to tak ,że pozycja piłeczki będzie wieksza niż jednaj z tych kulek i jeżeli bedzie mniejsza (chyba) niż ta druga kulka ta nadole i jeżeli pozycja kulki bedzie większa niż pozycja paletki x to kolizja ,wiem że dziwne to ale jest(jesli wogóle by to działało) @kamillo121 A co to da? I jak by miała wyglądac ta funkca dokładniej(kod); |
|
kamillo121 |
» 2010-02-02 17:39:21 A co to da , że będziesz "czyścił" z tła sprity tylko raz a nie kilka dziesiąt razy na sekunde ? być może przyśpieszy pracę programu w przyszłości ;] kod hmm bool sprKolizje( SDL_Rect A, SDL_Rect B ) { if( A.x + A.w <= B.x ) return false; if( A.x >= B.x + B.w ) return false; if( A.y + A.h <= B.y ) return false; if( A.y >= B.y + B.h ) return false; return true; }
Nie wiem czy to zadziała , bo tak z pamięci piszę ale powinno. Wywowułejsz raz po dodaniu do pozycji w osii x kulki a drugi po dodaniu pozycji w osii y kulki ;] (albo po przypisaniu, zależy jak zmieniasz pozycję kulki xD ) |
|
« 1 » 2 |