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

[Allegro] Problem z myszką

Ostatnio zmodyfikowano 2013-02-06 20:32
Autor Wiadomość
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:

C/C++
#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.
P-75800
Loodwin
Temat założony przez niniejszego użytkownika
Udało się
» 2013-02-06 20:32:27
Rozwiązałem już problem. Wystarczyło usunąć 30 linijkę:
clear_to_color( screen, makecol( 128, 128, 128 ) );
Zamykam temat.
P-75837
« 1 »
  Strona 1 z 1