Forczek Temat założony przez niniejszego użytkownika |
» 2013-07-24 19:19:46 Coś dzwoni, ale nie w tym kościele co trzeba. No bo for( x = pozycja_x; x < pozycja_x + al_get_bitmap_width( postac ); x++ ) Załóżmy, że postać znajduje się na pozycji 20x30 pixeli. No to nadaje wartość dla x 20 i powiększam ją, aż dojdzie do 20 + szerokość bitmapy czyli w moim przypadku 70. Tak samo dzieje się z wysokością. |
|
pekfos |
» 2013-07-24 19:25:03 Załóżmy, że postać znajduje się na pozycji 20x30 pixeli. No to nadaje wartość dla x 20 |
No.. i co masz odjąć, by z 20 zrobić 0..? |
|
Forczek Temat założony przez niniejszego użytkownika |
» 2013-07-24 19:32:46 Ale po co robić to 0? |
|
pekfos |
» 2013-07-24 19:35:58 Bo mapa i ludzik to dwa różne sprajty? Na mapie później rysujesz ludzika pod (x, y), więc zaczynasz pobierać piksele z mapy od (x, y). Sam ludzik zaczyna się od (0, 0), więc zaczynasz pobierać piksele z ludzika od... |
|
Forczek Temat założony przez niniejszego użytkownika |
» 2013-07-24 19:40:25 od zera ^^ /edit już chyba wszystko zrozumiałem :) zaraz spróbuje to wszystko poprawić i napiszę efekty /edit znowu a więc wielkie dzięki bo udało mi się wcielić to w życie. Oto mój kod: int colision( ALLEGRO_BITMAP * sprite, ALLEGRO_BITMAP * postac, int pozycja_x, int pozycja_y, int numer_koloru ) { int x, y; bool czy_wykrylo = false; unsigned char r, g, b; al_lock_bitmap( sprite, ALLEGRO_LOCK_READONLY, al_get_bitmap_format( sprite ) ); al_lock_bitmap( postac, ALLEGRO_LOCK_READONLY, al_get_bitmap_format( postac ) ); for( x = 0; x < al_get_bitmap_width( postac ); x++ ) { for( y = 0; y < al_get_bitmap_height( postac ); y++ ) { al_unmap_rgb( al_get_pixel( postac, x, y ), & r, & g, & b ); if( !( r == 255 && g == 0 && b == 255 ) ) { al_unmap_rgb( al_get_pixel( sprite, x + pozycja_x, y + pozycja_y ), & r, & g, & b ); if( numer_koloru == 1 && r == 0 && g == 0 && b == 0 ) { czy_wykrylo = true; } if( numer_koloru == 2 && r == 255 && g == 0 && b == 0 ) { czy_wykrylo = true; } } } if( czy_wykrylo ) break; } if( czy_wykrylo ) { czy_wykrylo = false; return true; } else { return false; } }
Ale przy al_convert_mask_to_alpha( ludek, al_map_rgb( 255, 0, 255 ) ); kolizja działa po staremu, dopiero jak wyrzuciłem i zmieniłem kod zaczęło działać poprawnie, a tło muszę wywalić bo no niestety Chuck Noris na różowym tle nie wygląda zbyt przekonująco :/ /edit można jakoś sprawdzić czy kolor jest przezroczysty, czy nie? /edit mam pewien pomysł, ale mam pytanie, czy mogę jakoś włączać i wyłączać maskowanie? |
|
Gabes |
» 2013-07-25 23:05:53 Stwórz czarno białą bitmapę mapę bitową Chucka Norrisa i to z nią sprawdzaj kolizje, albo al_unmap_rgba sprawdzaj czwarty parametr alfa czy zero. |
|
Forczek Temat założony przez niniejszego użytkownika |
» 2013-07-26 10:43:22 Ten drugi sposób mnie zaciekawił. Tylko wyjaśniłbyś mi jaśniej jak to zrobić? |
|
pekfos |
» 2013-07-26 14:58:22 |
|
1 « 2 » 3 |