Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Is_inside_bitmap & getpixel

Ostatnio zmodyfikowano 2010-01-16 23:06
Autor Wiadomość
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
P-13046
malan
» 2010-01-16 18:39:58
Byłoby łatwiej gdybyś wrzucił kod :).
P-13051
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;]
P-13065
kuba1817
Temat założony przez niniejszego użytkownika
» 2010-01-16 21:59:09
A więc to jest glowna petla:

C/C++
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; //Sprawdzanie wcisnietego klawisza
   
    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 ); //To jest ta NAJWAZNIEJSZA bitmapa-sprawdzam, czy na niej jest myszka
   
   
    wys_mape(); //Wyswietlamy mape
   
   
   
    CEdward.strzal();
    Sprawdz_Walke_Goblinow();
   
    if( chodzenie == stoi ) //Warunki chodzenia postaci i jej ruch
         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(); //Rysujemy 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 ) ); //Wysietlamy wsp myszki i sprawdzamy, czy jest ona w bitmapie 'pomocnicza_edward
   
    blit( bufor, screen, 0, 0, 0, 0, 1024, 768 ); //Bufor na ekran
   
   
   
   
};

Zrobilem pewnie jakis banalny blad...;d
P-13083
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.
P-13084
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
P-13086
malan
» 2010-01-16 23:06:04
Jeśli chcesz sprawdzić, czy myszka leży na bitmapie pomocnicza_edward spróbuj coś takiego:
C/C++
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;
   
};
P-13089
« 1 »
  Strona 1 z 1