Piast Temat założony przez niniejszego użytkownika |
Allegro kolizja bez udziału różowego koloru » 2010-03-06 11:34:42 Witam chciałbym zrobić aby po zderzeniu dwóch obiektów nastąpiła kolizja ale bez udziału tła różowego (rgb 255,0,255) masked_blit( kula2, bufor, 0, 0, bbb, ccc, kula2->w, kula2->h ); masked_blit( strzalka, bufor, 0, 0, mouse_x, mouse_y, strzalka->w, strzalka->h );
tła nie widać ale zachodzi kolizja między różowym kolorem Jak zrobić aby pominąć kolizję z różowym kolorem ? |
|
Bartaz |
... » 2010-03-06 11:38:59 Mógłbyś użyc kolizji z getpixel wtedy by tylko sprawdzalo kolor wybrany przez ciebie(chyba)ale przy takiej kolizji gra raczej nie moze miec zbytnio dużo kolorow. |
|
Piast Temat założony przez niniejszego użytkownika |
» 2010-03-06 11:47:38 if( kolizja( mouse_x, mouse_y, strzalka->w, strzalka->h, bbb, ccc, kula2->w, kula2->h ) == true ) { bbb = 60; circlefill( bufor, 50, 325, 15, makecol( 220, 5, 0 ) ); } Czyli nie ma innej funkcji ,która by pomijała kolizję z różowym kolorem ? |
|
szyx_yankez |
» 2010-03-06 12:53:27 |
|
kuba1817 |
» 2010-03-06 14:04:51 Przy sprawdzaniu wspolrzednych mozesz dodac wartosci[ktore najpierw trzeba obliczyc], tak aby ominac rozowe pola. Na obrazku bedzie lepiej widac: Obliczasz x oraz y i odpowiednio dodajesz podczas podawania wspolrzednych. Mam nadzieje, ze mnie zrozumiales:) |
|
dmx81 |
» 2010-03-06 23:24:16 masked_blit( mapa.obrazek, bufor, 0, 0, 0, 0, 4000, 600 ); rysuj( ludek, bufor );
for( int i = ludek.i_x; i <= ludek.i_x + ludek.i_s; i++ ) { for( int j = ludek.i_y; j <= ludek.i_w + ludek.i_y; j++ ) { if( getpixel( mapa.obrazek, i, j ) != makecol( 255, 0, 255 ) &&!( kolizja( ludek, ladowisko1 ) ) &&!( kolizja( ludek, ladowisko2 ) ) &&!( kolizja( ludek, ladowisko3 ) ) &&!( kolizja( ludek, rozbitek1 ) && rozbitek1.b_disp == true ) &&!( kolizja( ludek, rozbitek2 ) && rozbitek2.b_disp == true ) &&!( kolizja( ludek, rozbitek3 ) && rozbitek3.b_disp == true ) &&!( kolizja( ludek, rozbitek4 ) && rozbitek4.b_disp == true ) ) { textprintf_ex( bufor, font, ludek.i_x, ludek.i_y - 16, makecol( 200, 44, 77 ), - 1, "KOLIZJA !" ); explozja = true; koniec_kolizji = true; i = ludek.i_x + ludek.i_s; j = ludek.i_y + ludek.i_w; } else explozja = false; } }
Tutaj mam czesc mojego kodu, ktory odpowiada za kolizje wg koloru, nie wiem czy dobrz rozumiem twoje pytanie, inaczej mowiac chcesz, aby dotykajac rozowego o rozowe, nie bylo kolizji? wtedy sprawdzasz funkcja getpixel o wpolrzednych np kursora myszki, pozycji ludka itd, czy na danej bitmapie w podanym punkcie jest kolizja i znajduje sie tam kolor rozowy. w moim kodzie za kazdym przejsciem kodu wykonuje sie petla, sprawdzajaca kazdy jeden punkt postaci, czy aby ktorys z nich nie dotyka koloru innego niz rozowy, jesli jest na rozowym lub jest kolizja z jakims wyszczegolnionym obiektem, ktory nie ma powodowac kolizji, wszytsko jest ok, lecz jesli moja postac pojawi sie na kolorze innym niz rozowy, wtedy jest kolizja. |
|
malan |
» 2010-03-07 00:45:55 Nie wystarczyłby jeden warunek: if( wykryto_kolizje == true && getpixel( bitmapa, poz_x, poz_y ) != kolor_r ó ż owy ) return true; else return false;
? |
|
dmx81 |
» 2010-03-07 01:27:36 jesli mnie pytasz, to wydaje mi sie, ze nie wystarczylby ten jeden warunek, poniewaz 1. wykrycie kolizji nie jest warunkiem faktycznej kolizji (np kolizja z wieloma obiektami, jak lądowisko, dystrybutor tankowania paliwa, postacie w grze - one nie maja powodowac faktycznej kolizji - czyli u mnie eksplozji) dlatego musze te konkretne wypadki wykluczyc, wiec tak jakby mowie programowi, ze dopoki postac gracza znajduje sie na rozowym ok, jesli postac znajdzie sie "poza" rozowym, ale sa to wlasnie wyszczegolnione obiekty, to tez ok, dopiero, jesli nie sa to one, a kolor nie jest rozowy, uruchom faktyczna kolizje, czyli ekslozja....
jasne, ze mozna pogrupowac w tabele, vektory itd obiekty, ktore nie powoduja kolizji, a jakies inne dzialanie - np dodawanie paliwa itd, no i na pewno z czasem przerobie w ten sposob kod, nawet gdzies zadalem o to pytanie, bo nie bylem pewien, czy tworzac wektor obiektow wlasnej klasy, zajme dodatkowo duzo miejsca, czy beda to tylko wskazniki na obiekty (a ktos mi odpowiedzial, jak dynamicznie dodawac/tworzyc obiekty do vektora, ale nie o to mi chodzilo) |
|
« 1 » 2 |