[allegro]Przesuwanie bitmapy myszką.
Ostatnio zmodyfikowano 2012-01-18 15:47
ly000 Temat założony przez niniejszego użytkownika |
[allegro]Przesuwanie bitmapy myszką. » 2012-01-18 15:03:26 Witam, mam coś takiego: if( mx > weapon_x && mx < weapon_x + 32 && my > weapon_x && my < weapon_y + 32 && mb == 1 ) { weapon_x = mouse_x; weapon_y = mouse_y; } Co oczywiście ma za zadanie przesuwać bitmapę "weapon", tylko jest taki problem że ta bitmapa nie zawsze nadąża za kursorem i po przeciąganiu bitmapy odpowiednio długo przestaje w ogóle podążać za kursorem. O co chodzi? Czemu tak się dzieję? Jak temu zapobiec? Kod całego programu chętnie bym podał, ale niestety nie mogę;/ Z góry dziękuje za pomoc. |
|
pekfos |
» 2012-01-18 15:23:05 Zmieniaj pozycje bitmapy tak by kursor się w niej znajdował (najlepiej na środku). czyli BitX = MouseX - BitW / 2; |
|
Gabes |
» 2012-01-18 15:47:53 Również miałem kiedyś ten problem poradziłem sobie w ten sposób że gdy myszka jest na danym kwadracie i jest wciśnięty klawisz myszki dodaje zmienną bool stan=true.
Dalej już sprawdzam tylko tą zmienną a gdy puszcze przycisk myszki stan=false.
#include <allegro.h> int main() { allegro_init(); install_keyboard(); install_mouse(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT, 800, 600, 0, 0 ); BITMAP * bufor = create_bitmap( 800, 600 ); BITMAP * box = create_bitmap( 100, 100 ); int box_x = 200, box_y = 200; bool stan = false; while( !key[ KEY_ESC ] ) { if( mouse_x >= box_x && mouse_x <= box_x + 100 && mouse_y >= box_y && mouse_y <= box_y + 100 && mouse_b & 1 ) stan = true; if( mouse_b == 0 ) stan = false; if( stan == true ) box_x = mouse_x - 50, box_y = mouse_y - 50; clear_to_color( bufor, makecol( 100, 255, 100 ) ); masked_blit( box, bufor, 0, 0, box_x, box_y, box->w, box->h ); textprintf_ex( bufor, font, 550, 20, makecol( 255, 255, 255 ), - 1, "mouse_x=%3d,mouse_y=%3d", mouse_x, mouse_y ); show_mouse( bufor ); blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); show_mouse( screen ); } destroy_bitmap( box ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN(); |
|
« 1 » |