Loodwin Temat założony przez niniejszego użytkownika |
[Allegro] Problem z myszką » 2013-02-06 14:34:39 Witam! Właśnie czytam kurs http://cpp0x.pl/kursy/Kurs-Allegro-4-x-C++/21 i chciałem połączyć wyświetlanie(wraz z animacją) z lekcją o myszce. Powstał taki kod: #include <allegro.h>
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
int mx = 0; int my = 0; int mb = 0; void myszka() { if( mx != mouse_x || my != mouse_y || mb != mouse_b ) { mx = mouse_x; my = mouse_y; mb = mouse_b; } };
int main() { allegro_init(); install_keyboard(); set_color_depth( 32 ); set_gfx_mode( GFX_AUTODETECT, 800, 600, 0, 0 ); clear_to_color( screen, makecol( 128, 128, 128 ) ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) ); install_mouse(); show_mouse( screen ); unscare_mouse(); BITMAP * ludek0 = NULL; BITMAP * ludek1 = NULL; BITMAP * ludek2 = NULL; BITMAP * ludek3 = NULL; BITMAP * ludek4 = NULL; BITMAP * bufor = NULL; bufor = create_bitmap( 800, 600 ); ludek0 = load_bmp( "ludek0.bmp", default_palette ); ludek1 = load_bmp( "ludek1.bmp", default_palette ); ludek2 = load_bmp( "ludek2.bmp", default_palette ); ludek3 = load_bmp( "ludek3.bmp", default_palette ); ludek4 = load_bmp( "ludek4.bmp", default_palette ); if( !bufor ) { allegro_message( "Nie mogę utworzyć obrazka bufor !" ); allegro_exit(); return 0; } if( !ludek0 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogę załadować obrazka Ludek !" ); allegro_exit(); return 0; } int ludek_x = 100; int ludek_y = 100; int frame = 0; while( !key[ KEY_ESC ] ) { myszka(); blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); while( speed > 0 ) { if( key[ KEY_LEFT ] ) ludek_x--; if( key[ KEY_RIGHT ] ) ludek_x++; if( key[ KEY_UP ] ) ludek_y--; if( key[ KEY_DOWN ] ) ludek_y++; speed--; frame++; if( frame > 100 ) frame = 0; }; clear_to_color( bufor, makecol( 128, 128, 128 ) ); if( frame < 20 ) { draw_sprite( bufor, ludek0, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek2, ludek_x, ludek_y ); } else if( frame >= 60 && frame < 80 ) { draw_sprite( bufor, ludek3, ludek_x, ludek_y ); } else if( frame >= 80 && frame < 100 ) { draw_sprite( bufor, ludek4, ludek_x, ludek_y ); } textprintf_ex( bufor, font, 20, 20, makecol( 200, 200, 200 ), - 1, "Myszka x to:%d Myszka y to:%d Klawisz to:%d", mx, my, mb ); blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); } remove_int( increment_speed ); destroy_bitmap( ludek0 ); destroy_bitmap( ludek1 ); destroy_bitmap( ludek2 ); destroy_bitmap( ludek3 ); destroy_bitmap( ludek4 ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
Jest tylko jeden problem. A mianowicie: myszka miga. Nie tak regularnie, tylko co chwilę pojawia się i znika :). Ale tylko na jakiś ułamek sekundy. Jest to ledwo zauważalne. Próbowałem jakoś to rozwiązać, ale nie wiem co jest źle lub czy czegoś brakuje. P.S Jeśli zły dział to proszę o przeniesienie. |