Bartaz Temat założony przez niniejszego użytkownika |
C++ allegro kolizja (myszka) » 2010-03-08 19:32:16 Witam jak zrobic kolizje muszki np z bitmapa ludka. chodzi mi o ta kolizje z prostakatami if( kolizja( myszkax, myszka.y, myszka.s, myszka.w, ludeka.x, ludeka.y, ludeka.s, ludeka.w ) ) { }
|
|
szyx_yankez |
» 2010-03-08 19:48:38 BITMAP * ludek;
if( mouse_x > ludekx && mouse_x < ludekx + ludek->w && mouse_y > ludeky && mouse_y < ludeky + ludek->h ) { }
|
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-03-08 20:01:44 Fajne ale nie dziala xD class Cpostac { public: int x, y; int s, w; };
Cpostac ludeka;
if( mx > ludeka.x && mx < ludeka.x + ludeka.s && my > ludeka.y && my < ludeka.y + ludeka.w ) { ludeka.x = ludeka.x + 7; } |
|
dmx81 |
» 2010-03-08 20:05:49 lub bardziej szczegolowa kolizja if( getpixel( bufor, myszka.x, myszka.y ) != makecol( 100, 100, 100 ) && mb != 0 )
gdzie na bufor rysujemy naszego ludka na tle wiadomego koloru wyswietlajac znana funkcja masked_blit, a mb - to zmienna mowiaca nam, czy jakis przycisk myszki wcisniety (nie pamietam dokladnie, ale np LPM: mb=1, PPM: mb=2, brak wcisniecia - mb=0) mozesz oczywiscie dac bez warunku wcisniecia przycisku myszki, wtedy kolizja tuz po najechaniu na kolorowa ( a nie kwadratowa) czesc ludzika pozdr. |
|
dmx81 |
» 2010-03-08 20:12:23 a co do tego co napisales wyzej, powinno dzialac, musze wychodzic wiec nie bede sie wglebial, mimo ze kod krotki, ale ja sprawdzam wiekszosc tego typu niedzialajacych rzeczy przez textprintf_ex( bufor, font, 20, 20, makecol( 200, 200, 200 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mx, my, mb ); czyli wyswietlam sobie aktualna pozycje myszki, to samo zrob dla ludka, wtedy bedziesz widzial, czy na pewno maja podobne wspolrzedne, np jak wyswietlalem cos na bitmapie ruchomej, niby na ekranie mialo pozycje np 500,300, ale po wyswietleniu okazalo sie ze ma 900,300, a kursor 500,300 a znajdowaly sie w jednakowym miejscu na ekranie - nie dodalem scrollowanych wartosci;) ps. warto by utworzyc jakis konstruktor do tej klasy class C_poziom1 { public: int i_x, i_y, i_s, i_w; bool b_disp; BITMAP * obrazek; C_poziom1(); C_poziom1( int x, int y, int s, int w ); }; C_poziom1::C_poziom1( int x, int y, int s, int w ) { i_x = x; i_y = y; i_s = s; i_w = w; }
to moj przyklad ;) bo tu co napisales, nie wiemy jakie wspolrzedne przyjmuje ludek - domyslnie wiadomo, ale nie wszytsko co sie domyslamy, dzieje sie w rzeczywistosci;) |
|
szyx_yankez |
» 2010-03-08 20:13:11 if( mx > ludeka.x && mx < ludeka.x + ludeka.s && my > ludeka.y && my < ludeka.y + ludeka.w ) { ludeka.x = ludeka.x + 7; }
na if( mx > ludeka.x && mx < ludeka.x + ludeka->w && my > ludeka.y && my < ludeka.y + ludeka->h ) { ludeka.x = ludeka.x + 7; }
Gdzie ludeka to nazwa twojej bitmapy ludka. |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-03-08 20:13:39 Ale wtedy gra nie mogla by miec chyba za duzo kolorow ,nie da sie zrobi z tamta kolizja? |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-03-08 20:33:40 Ok juz wszystko dziala dzieki za pomoc. |
|
« 1 » |