Forczek Temat założony przez niniejszego użytkownika |
[Allegro 5] Kolizje per pixel » 2013-07-08 17:50:11 Siemka, potrzebuje stworzyć kolizje do gry, najlepsza chyba będzie kolizja pixel per pixel. Trochę o niej czytałem w internecie, ale nie mam pomysłu jak to zrobić. Jestem w tej kwestii zielony. |
|
kubawal |
» 2013-07-08 18:37:32 |
|
Forczek Temat założony przez niniejszego użytkownika |
» 2013-07-08 18:46:12 Po angielsku i nie wiele rozumiem. Ale mniej więcej już mi jaśniej, tylko nadal nie wiem jak to zrobić. Bo mam sobie patyczaka i on, ma iść przez świat, no i ten świat to załóżmy czarne linie i na to nałożone tło. No i nie mam pojęcia jak zrobić, aby postać nie zapadała się w dół, nie szła za daleko w lewo/prawo, ani gdy bd skakać, żeby nie skakała za wysoko. |
|
kubawal |
» 2013-07-08 18:56:33 Chodzi chyba o tą funkcję, wystarczy zmienić te SDL_Rect na odpowiedniki w Allegro (nie znam się na Allegro5): bool check_collision( std::vector < SDL_Rect > & A, std::vector < SDL_Rect > & B ) { int leftA, leftB; int rightA, rightB; int topA, topB; int bottomA, bottomB; for( int Abox = 0; Abox < A.size(); Abox++ ) { leftA = A[ Abox ].x; rightA = A[ Abox ].x + A[ Abox ].w; topA = A[ Abox ].y; bottomA = A[ Abox ].y + A[ Abox ].h; for( int Bbox = 0; Bbox < B.size(); Bbox++ ) { leftB = B[ Bbox ].x; rightB = B[ Bbox ].x + B[ Bbox ].w; topB = B[ Bbox ].y; bottomB = B[ Bbox ].y + B[ Bbox ].h; if((( bottomA <= topB ) ||( topA >= bottomB ) ||( rightA <= leftB ) ||( leftA >= rightB ) ) == false ) { return true; } } } return false; }
|
|
|
MrPoxipol |
» 2013-07-08 19:13:51 |
|
Forczek Temat założony przez niniejszego użytkownika |
» 2013-07-08 20:34:49 Znalazłem taki oto kod: ALLEGRO_DISPLAY * display = al_create_display( 800, 600 ); ALLEGRO_BITMAP * bmp = al_get_backbuffer( display ); ALLEGRO_LOCKED_REGION * lock = al_lock_bitmap( bmp, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_READWRITE ); int r, g, b; ALLEGRO_COLOR color = al_get_pixel( bmp, x, y ); al_unmap_rgb( color,( unsigned char * ) & r,( unsigned char * ) & g,( unsigned char * ) & b ); al_unlock_bitmap( bmp ); if( r == 255 && g == 255 && b == 255 ) { }
Po części go rozumiem, ale nie w całości. Zaznaczyłem, czego nie wiem. Mógłby mi ktoś to objaśnić? Bo nie znalazłem w temacie wyjaśnienia do tego, a na razie nie mogę nic znaleźć. |
|
SeaMonster131 |
» 2013-07-08 22:39:31 @up: To zobacz w dokumentacji. |
|
Forczek Temat założony przez niniejszego użytkownika |
» 2013-07-09 10:45:57 Znalazłem wszystko w dokumentacji, ale nadal nie rozumiem. Bo po angielsku, nawet z tłumaczem cienko idzie :/
edit: jednak trochę się wysiliłem i wiem już mniej więcej co od czego jest. Ale mam problem, bo nie ogarniam, jak zrobić, aby mój ludzik podczas kolizji nie zapadał się w dół i gdy np. jest wzniesienie, on szedł pod tą górkę. A gdy przeszkoda to, żeby musiał przeskoczyć :/ |
|
« 1 » 2 3 4 5 6 |