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

[allegro]Przesuwanie bitmapy myszką.

Ostatnio zmodyfikowano 2012-01-18 15:47
Autor Wiadomość
ly000
Temat założony przez niniejszego użytkownika
[allegro]Przesuwanie bitmapy myszką.
» 2012-01-18 15:03:26
Witam, mam coś takiego:

C/C++
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.
P-48639
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;
P-48640
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.
C/C++
#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();
P-48644
« 1 »
  Strona 1 z 1