| 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 |