kuba1817 Temat założony przez niniejszego użytkownika |
[Allegro] Is_inside_bitmap & getpixel » 2010-01-16 17:58:53 Siema, mam kolejny problem...;d Otoz sprawdzam, czy dany punkt(x,y) lezy na bitmapie za pomoca funkcji is_inside_bitmap, ale nie dziala...;d Tzn: Wedlug funkcji is_inside_bitmap bitmapa znajduje sie w lewym gornym rogu(0,0), a w rzeczywistosci bitmapa lezy w (300,300).
Sprawdzam, czy myszka[czyli wsp mouse_x, mousy_y] lezy na tej bitmapie. I funkcja zwraca '1'[czyli, ze punkt lezy na bitmapie]w lewym gornym rogu, natomiast w rzeczywsitym miejscu polozenia bitmapy nie... Funkcja getpixal dziala podobnie... Wie ktos o co chodzi?;] Bitmape wyswietlam na buforze, w kolejnosci: -czyszcze bufor i bitmape, -rysuje mape na buforze, -rysuje bitmape do sprawdzenia na buforze, -sprawdzam czy myszka znajduje sie w bitmapie, -wyswietlam inne rzeczy, m.in myszke, -wyswietlam bufor na ekranie.
Z gory wieelkie dzieki...;] Wybaczcie brak polskich znakow, spieszylem sie;d |
|
malan |
» 2010-01-16 18:39:58 Byłoby łatwiej gdybyś wrzucił kod :). |
|
kuba1817 Temat założony przez niniejszego użytkownika |
» 2010-01-16 19:08:10 Wiem, tylko ze ma on ponad 1000 linii, a zaraz wychodze i nie mam czasu juz obcinac;d jak wroce to wrzuce;] |
|
kuba1817 Temat założony przez niniejszego użytkownika |
» 2010-01-16 21:59:09 A więc to jest glowna petla: while( !key[ KEY_P ] ) { clear_to_color( bufor, makecol( 150, 150, 150 ) ); clear_to_color( pomocnicza_edward, makecol( 255, 0, 255 ) ); dmg = 0; chodzenie = stoi; if( key[ KEY_D ] ) chodzenie = prawo; if( key[ KEY_A ] ) chodzenie = lewo; if( key[ KEY_S ] ) chodzenie = dol; if( key[ KEY_W ] ) chodzenie = gora; if( key[ KEY_E ] && czy_eq_tak == 1 ) { pokaz_ekwipunek =!pokaz_ekwipunek; warunek_spr_eq = true; } CEdward.sprawdz_eq(); speed--; blit( pomocnicza_edward, bufor, 0, 0, CEdward.edward_x, CEdward.edward_y, pomocnicza_edward->w, pomocnicza_edward->h ); wys_mape(); CEdward.strzal(); Sprawdz_Walke_Goblinow(); if( chodzenie == stoi ) CEdward.stoi(); if( chodzenie == lewo ) CEdward.idz_w_lewo(); if( chodzenie == prawo ) CEdward.idz_w_prawo(); if( chodzenie == dol ) CEdward.idz_w_dol(); if( chodzenie == gora ) CEdward.idz_w_gore(); if( pokaz_ekwipunek == true ) CEdward.pokaz_eq(); Laska_Strzela(); Rysuj_Laske(); CGoblin1.Odejmij_Zycie(); CGoblin2.Odejmij_Zycie(); CGoblin3.Odejmij_Zycie(); CGoblin4.Odejmij_Zycie(); CGoblin5.Odejmij_Zycie(); CGoblin6.Odejmij_Zycie(); CGoblin7.Odejmij_Zycie(); CGoblin8.Odejmij_Zycie(); CGoblin9.Odejmij_Zycie(); CGoblin10.Odejmij_Zycie(); Rysuj_Myszke(); textprintf_ex( bufor, font, 20, 20, makecol( 200, 200, 200 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mouse_x, mouse_y, is_inside_bitmap( pomocnicza_edward, mouse_x, mouse_y ) ); blit( bufor, screen, 0, 0, 0, 0, 1024, 768 ); }; Zrobilem pewnie jakis banalny blad...;d |
|
KrQ |
» 2010-01-16 22:12:52 funkcja is inside bitmap() porównuje do położenie punktu do rozmiaru bitmapy lub clipping mask (cos na kształt maski powiekszającej obraz lub powielającym na danym obszarze a nie jego położenia na ekranie.
w dziale tutoriale opisałem jak ja radze sobie z tym problemem. |
|
kuba1817 Temat założony przez niniejszego użytkownika |
» 2010-01-16 22:18:11 No a funkcja getpixel? Podobno zwraca -1, gdy dany punkt nie lezy na bitmapie;d Ale dziala tak samo;p Kolizje mam juz zrobione, to potrzebuje, zeby okreslic, czy 2 bitmapy sa na tyle blisko siebie, ze mozna zrobic walke;d |
|
malan |
» 2010-01-16 23:06:04 Jeśli chcesz sprawdzić, czy myszka leży na bitmapie pomocnicza_edward spróbuj coś takiego: int nazwa_klasy::is_on_bitmap( void ) { if(( mouse_x >= CEdward.edward_x && mouse_x <=( CEdward.edward_x + pomocnicza_edward->w ) ) && ( mouse_y >= CEdward.edward_y && mouse_y <=( CEdward.edward_y + pomocnicza_edward->h ) ) ) return 0; else return 1; };
|
|
« 1 » |