Ambitny16 Temat założony przez niniejszego użytkownika |
[ALLEGRO5] Wykrywanie kolizji myszki z grafikami PNG i unikanie kolizji na przezroczystej powierzchni. » 2017-09-28 18:33:25 Jak w temacie, chciałbym aby program po najechaniu myszką na grafikę png coś robił, a po kliknieciu robił coś innego. Jak szukałem w internecie to w większości trafiałem na rozwiązania działające na prostokątach, a ja chcę zrobić przyciski z grafik z zaokrąglonymi rogami oraz z grafik całkowicie nieregularnych. Jak jest to proste to nie bijcie, tylko wytłumaczcie, z góry dzięki :) Oczywiście nie chcę aby ktoś za mnie pisał kod, ale za jakieś fragmenty z objaśnieniami bedę wdzięczny. |
|
Gabes |
» 2017-09-30 00:54:10 musisz odebrać zdarzenia z myszki, powinieneś zastosować: unsigned char r, g, b, a; ... al_set_target_bitmap; al_unmap_rgba( al_get_pixel (bitmap,myszka.x,myszka.y),&r,&g,&b,&a);
postaram się zarzucić kodem :) |
|
marianekA |
» 2017-09-30 18:05:10 Tak jak napisał Gabes. Napisałem taki przykładzik - na pewno Ci pomoże: #include <allegro5/allegro.h> #include <allegro5/allegro_primitives.h>
int main() { al_init(); al_install_mouse(); al_init_primitives_addon(); ALLEGRO_DISPLAY * okno = al_create_display( 800, 600 ); ALLEGRO_BITMAP * obrazek = al_create_bitmap( 800, 600 ); ALLEGRO_MOUSE_STATE myszka; al_set_target_bitmap( obrazek ); al_draw_circle( 400, 200, 80, al_map_rgb( 20, 122, 122 ), 20 ); al_draw_rectangle( 400 - 50, 200 - 50, 400 + 50, 200 + 50, al_map_rgb( 200, 22, 122 ), 10 ); al_set_target_bitmap( al_get_backbuffer( okno ) ); unsigned char r, g, b; while( 1 ) { al_get_mouse_state( & myszka ); al_clear_to_color( al_map_rgb( 20, 60, 60 ) ); al_draw_bitmap( obrazek, 0, 0, 0 ); ALLEGRO_COLOR kk = al_get_pixel( obrazek, myszka.x, myszka.y ); al_unmap_rgb( kk, & r, & g, & b ); if( r + g + b > 0 ) al_draw_tinted_bitmap_region ( obrazek, al_map_rgba( 50, 50, 50, 0 ), 300, 100, 600, 200, 300, 100, 0 ); if( r + g + b > 0 && myszka.buttons != 0 ) break; al_flip_display(); al_rest( 0.001 ); } return 0; }
|
|
Gabes |
» 2017-10-01 22:59:50 Troszeczkę bym to usprawnił, zmieniał tylko same składowe kolorów(R,G,B) i dodał zmienne pozycji bmp. "obrazek" odejmował od poz. myszki:) #include <allegro5/allegro.h> #include <allegro5/allegro_primitives.h> int main() { al_init(); al_install_mouse(); al_init_primitives_addon(); ALLEGRO_DISPLAY * okno = al_create_display( 800, 600 ); ALLEGRO_BITMAP * obrazek = al_create_bitmap( 180, 180 ); ALLEGRO_MOUSE_STATE myszka; al_set_target_bitmap( obrazek ); al_draw_circle( 90, 90, 80, al_map_rgb( 255, 255, 255 ), 20 ); al_draw_rectangle( 40, 40, 140, 140, al_map_rgb( 200, 22, 122 ), 10 ); al_set_target_bitmap( al_get_backbuffer( okno ) ); int poz_X = 222, poz_Y = 111; unsigned char r, g, b, kol_R, kol_G, kol_B; while( 1 ) { al_get_mouse_state( & myszka ); al_clear_to_color( al_map_rgb( 120, 160, 160 ) ); ALLEGRO_COLOR kk = al_get_pixel( obrazek, myszka.x - poz_X, myszka.y - poz_Y ); al_unmap_rgb( kk, & r, & g, & b ); if( r + g + b > 0 ) { kol_R = 255, kol_G = 255, kol_B = 255; } else kol_R = 200, kol_G = 200, kol_B = 200; al_draw_tinted_bitmap_region( obrazek, al_map_rgb( kol_R, kol_G, kol_B ), 0, 0, 180, 180, poz_X, poz_Y, 0 ); if( r + g + b > 0 && myszka.buttons != 0 ) break; al_flip_display(); al_rest( 0.001 ); } return 0; } |
|
« 1 » |