Bartaz Temat założony przez niniejszego użytkownika |
SDL Kolizja » 2009-11-28 16:34:09 Witam Mam pytanie czy jest jakaś funkcja w SDL do kolizji czy trzeba samemu sobie napisać jak w Allegro? Jeżeli nie ma to morze mi ktoś podać przykład? Gdzie indziej czytałem ,że trzeba się pobawić jakoś pixelami ale coś mi nie wychodzi.
I jeszcze jedno chciałem troche grafike poprawić , śscągłem sobie Paintnet zrobiłem "deske" ale w grze nie było jej widac (dałem rozszerzenie bmp). Why? |
|
malan |
» 2009-11-28 19:26:25 Mam pytanie czy jest jakaś funkcja w SDL do kolizji czy trzeba samemu sobie napisać jak w Allegro? Raczej nie ma - tak jak w allegro - samemu trzeba sobie napisać. Przykładów na forum jest mnóstwo: site:forum.ddt.pl kolizjeI jeszcze jedno chciałem troche grafike poprawić (...) To nie koniecznie musi być wina bitmapy, czy Paint.NET-a. Moim zdaniem masz błąd w kodzie ;p. P.S. Pamiętaj o zasadzie jeden problem == jeden temat. |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2009-11-28 19:49:15 Przeczytałem dużo z tamtych postów ale umnie się nie sprawdza zbytnio. Próbowałem zrobić coś takiego ,że jeżeli pozycja kulki bedzię równa pozycji "deski" to kolizja ale zabardzo mi to nie działa.Może ma ktoś jakiś pomysł? |
|
Bartaz Temat założony przez niniejszego użytkownika |
Koniec.. » 2009-11-28 21:13:33 Pier.... wracam do allegro tam przynajmniej da się coś zrobić. SDL Śmierdzi... Dzięki wszystkim za pomoc... |
|
Bartaz Temat założony przez niniejszego użytkownika |
!!! » 2009-11-28 23:07:33 Jednak zostaje przy SDL xD I teraz tak próbuje zastosować kolizje z allegro do SDL ale coś nie działa o co chodzi? Kod: To taki niby Pong ma być. #include <SDL/SDL.h>
int x = 50; int y = 410; int f = 790; int g = 200; int k = 70; int l = 370; int w; int h;
SDL_Surface * ekran = NULL; SDL_Surface * ludek = NULL; SDL_Surface * tlo = NULL; SDL_Surface * kula = NULL; int SDL_FillRect( SDL_Surface * dst, SDL_Rect * dstrect, Uint32 color ); SDL_Event zdarzenie; SDL_Rect LudekDestination; SDL_Rect TloDestination; SDL_Rect KulaDestination;
Uint8 * keystate = SDL_GetKeyState( NULL ); bool kolizja( int x1, int y1, int s1, int w1, int x2, int y2, int s2, int w2 ) { if( x2 <= x1 + s1 && x2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true; else if( x2 <= x1 + s1 && x2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true; else if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true; else if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true; else return false; }; bool wyjscie = false; int main( int argc, char * args[] ) { ekran = SDL_SetVideoMode( 900, 700, 32, SDL_SWSURFACE ); ludek = SDL_LoadBMP( "ludek.bmp" ); tlo = SDL_LoadBMP( "tlo.bmp" ); kula = SDL_LoadBMP( "kula.bmp" ); while( !wyjscie ) { if( kolizja( tlo->x, tlo->y, tlo->w, tlo->h, kula->x, kula->y, kula->w, kula->h ) == true ) { x = x + 7; } SDL_WM_SetCaption( "Pong by Bartaz", NULL ); while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) { wyjscie = true; } } if( keystate[ SDLK_w ] ) { y = y - 7; } if( keystate[ SDLK_s ] ) { y = y + 7; } if( keystate[ SDLK_DOWN ] ) { g = g + 7; } if( keystate[ SDLK_UP ] ) { g = g - 7; } k = k + 7; LudekDestination.x = x; LudekDestination.y = y; TloDestination.x = f; TloDestination.y = g; KulaDestination.x = k; KulaDestination.y = l; SDL_FillRect( ekran, NULL, 0 ); SDL_BlitSurface( tlo, NULL, ekran, & TloDestination ); SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination ); SDL_BlitSurface( kula, NULL, ekran, & KulaDestination ); SDL_Flip( ekran ); } SDL_FreeSurface( ludek ); SDL_FreeSurface( tlo ); SDL_FreeSurface( kula ); SDL_Quit(); return 0; } |
|
malan |
» 2009-11-29 00:55:25 Przecież ten kod się nawet nie skompiluje: 46|error: 'struct SDL_Surface' has no member named 'x'| Poza tym, czy zapis: kula -> w = pozycja kuli ? Na moje to szerokość bitmapy (przynajmniej tak w allegro jest ;p). Pomijając to wytłumacz mi czemu przesuwasz tło: SDL_BlitSurface(tlo,NULL,ekran,&TloDestination); Chyba że tak sobie wymyśliłeś, to zwracam honor ;). W tym całym 'Pong'-u jeśli dobrze pamiętam to "rakietki" poruszają się tylko gór/dół ? ;> Jeśli tak to z kolizją 'kula-rakietka' nie ma problemu ;p. Sprawdzasz tylko, czy: (pozycja_kuli_x>=pozycja_rakietki_x && pozycja_kuli_x<=pozycja_rakietki_x_+szer) && (pozycja_kuli_y<=pozycja_rakietki_y_top && pozycja_kuli_y>=pozycja_rakietki_y_down). szer - szerokość rakietki. top - górna krawędź, down - dolna krawędź. Jeśli warunek jest spełniony - odbij_piłeczke. |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2009-11-29 10:44:04 A jak mam "zaznaczyć" ,że np tam jest lewy górny róg rakietki Możesz trochę inaczej to wytłumaczyć albo jak by ci się chciało w co wątpię to wpisać taką kolizje w ten kod. Inaczej ,skad mam wiedzieć jaką ma szerokość paletka(głupie pytanie xD). Czytałem coś o bibliotece "coolision" czy jakoś tak morze ktoś wie o tym coś więcej. A to: SDL_BlitSurface(tlo,NULL,ekran,&TloDestination); To przesuwam bo tło to jedna z rakietek xD więc rakietka musi się przesuwać. Aha i jak w SDL WYŚWIETLIĆ TEKST? |
|
DejaVu |
» 2009-11-29 13:06:43 Aha, a co dzisiaj będzie na obiad? Jeden temat == jeden problem.Co do kolizji to na forum istnieje pełno przykładów i wyjaśnień jak uzyskać kolizję. Swego czasu temat naprawdę był ostro maglowany. Wykorzystaj zasoby, które już istnieją na forum, a nie wychodzisz z założenia 'nie rozumiem, wyjaśnijcie mi to indywidualnie'. Dostałeś dużą pulę rozwiązań. No chyba, że 50 tematów to mało... [google] site:forum.ddt.pl temat kolizja |
|
« 1 » |