Mysz w allegro

0

Witam, czy w allegro da się tak zrobić, aby program wymuszał/ klikał za ciebie myszką?
Tzn. wiem że coś takiego istnieje, ponieważ już to gdzieś widziałem, ale zapomniałem gdzie.

Będę bardzo wdzięczny za pomoc, wiem że to wygląda na nieudolne wykonywanie bota, ale stworzyłem już wiele gier, i chciałbym poznać inne możliwości tej biblioteki.

Odświeżam...
Chodzi mi o coś takiego jak set_mouse_position czy coś takiego, nie wiem jaki to jest odpowiednik w allegro, ale na 90% coś takiego istnieje.

1

Odświeżasz, ale zamiast tego byś równie dobrze mógł znaleźć coś w necie. Nie chcę, żeby ta odpowiedź wyglądała jak użyj google i koniec kropka. Chodzi o to, że tutaj raczej - jak sam zauważyłeś zresztą - programistów Allegro może być bardzo mało. Co za tym idzie, na odpowiedź możesz długo czekać. Wpisałem sobie w google "allegro change mouse position" i odpowiednik w języku polskim.

Nie znam się na allegro, dlatego nie mogę nic więcej zrobić niż rzucić Ci te 2 linki:
http://cpp0x.pl/kursy/Kurs-Allegro-C++/Myszka/73 - jakiś kurs z obsługą ogólnie myszki, nie ma tam nic o zmianie pozycji, ale jak dla mnie by było jak znalazł, żeby zobaczyć jak się myszkę instaluje w allegro.
http://alleg.sourceforge.net/latestdocs/en/alleg004.html#position_mouse - jakaś chyba dokumentacja, widać funkcję do zmiany pozycji.

Mam nadzieję, że nie odbierasz tego postu jako ataku na siebie, bo każdy z nas kiedyś zaczynał naukę. Mam nadzieję, że te linki Ci wystarczą.

0

Dzięki, w tym 2 linku znalazłem takie coś jak position_mouse(x,y )

Lecz pojawia się kolejny problem - napisałem program dzięki któremu można przesuwać kursorem za pomocą strzałek.
Wszystko niby działa, ale jeżeli próbuję przemieścić ten kursor, wtedy zaczyna strasznie migać, wygląda to trochę nieestetycznie.
Dałoby się coś temu zaradzić?
Kod:

#include <allegro.h> 

int mx = 0, my = 0, mb = 0;
void mouse()
{
    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_WINDOWED, 800, 600, 0, 0 );
    install_mouse();
    
    unscare_mouse();
    BITMAP * bufor = NULL;
    bufor = create_bitmap( 800, 600 );


    show_mouse( screen );
    
    while( !key[ KEY_ESC ] )
    {
    if( key[ KEY_LEFT ] )  position_mouse(mx-5,my );;
    
    if( key[ KEY_RIGHT ] )  position_mouse(mx+5,my );;
    
    if( key[ KEY_UP ] )  position_mouse(mx,my-5 );;
    
    if( key[ KEY_DOWN ] )  position_mouse(mx,my+5 );;
    
    
    if( key[ KEY_UP ] &&  key[ KEY_RIGHT ] )  position_mouse(mx+5,my-5 );;
    if( key[ KEY_UP ] &&  key[ KEY_LEFT ] )  position_mouse(mx-5,my-5 );;
    
    if( key[ KEY_DOWN ] &&  key[ KEY_RIGHT ] )  position_mouse(mx+5,my+5 );;
    if( key[ KEY_DOWN ] &&  key[ KEY_LEFT ] )  position_mouse(mx-5,my+5 );;
    
        clear_to_color( bufor, makecol( 100, 100, 100 ) );
        mouse();
        blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
        clear_keybuf();
        
   
    }
    
    destroy_bitmap( bufor );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
0

Spróbuj tak:

scare_mouse()
// ... zmiana pozycji myszki
unscare_mouse()

Zajrzyj sobie tutaj jak czegoś brakuje: http://www.allegro.cc/manual/4/
i użyj google ;)

0

Tzn. mam zrobić coś takiego?
if( key[ KEY_LEFT ] ){ scare_mouse(); position_mouse(mx-5,my );unscare_mouse();;}

Nadal jest to samo ;< .

0

Ja kiedyś w OpenGLu pisałem, takie miganie grafiki to mi tylko się kojarzy z brakiem użycia podwójnego buforowania, ale wtedy cała grafika, a nie tylko kursor miała by takie problemy przy animacji. Ale jak już pisałem, nie wiem nic o Allegro, czy to się tam ustawia, czy domyślnie jest to zrobione, bo jednak Allegro to trochę wyższy poziom abstrakcji niż OpenGL.

0

Podwójne buforowanie jest, możliwe że funkcje nie są napisane w dobrej kolejności(w allegro często się z takim czymś spotykałem)

Okey, zrobiłem coś takiego:

 if( key[ KEY_LEFT ] ){scare_mouse();  position_mouse(mx-10,my );unscare_mouse();;}
blit( bufor, screen, 0, 0, 0, 0, 800, 600 );

Lecz pojawia się kolejny problem z kierunkami pośrednimi,

if( key[ KEY_UP ] && key[ KEY_RIGHT ] ){scare_mouse(); position_mouse(mx+5,my-5 );unscare_mouse();;}
blit( bufor, screen, 0, 0, 0, 0, 800, 600 );

Kursor zamiast podążać płynnie na ukos porusza się 5 pixeli w góre i potem 5 pixel w prawo, tak jakby się trzęsie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1