Mysz w allegro

2011-09-23 23:51

Rejestracja: 8 lat temu

Ostatnio: 1 rok temu

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.

edytowany 4x, ostatnio: ly000, 2011-09-24 13:09

Pozostało 580 znaków

2011-09-24 17:03

Rejestracja: 12 lat temu

Ostatnio: 19 godzin temu

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/[...]/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ą.

edytowany 1x, ostatnio: Mrowa, 2011-09-24 18:06

Pozostało 580 znaków

2011-09-24 17:38

Rejestracja: 8 lat temu

Ostatnio: 1 rok temu

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();

Pozostało 580 znaków

2011-09-24 17:46

Rejestracja: 9 lat temu

Ostatnio: 6 lat temu

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 ;)


Pozdro & poćwicz!

Pozostało 580 znaków

2011-09-24 17:55

Rejestracja: 8 lat temu

Ostatnio: 1 rok temu

0

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

Nadal jest to samo ;< .

edytowany 1x, ostatnio: ly000, 2011-09-24 17:56
Możesz jeszcze spróbować dołożyć między scare_mouse() a unscare_mouse() tego swojego blita (tylko nie wywołuj nowego, tylko zmień to wywołanie co masz już). - stfu 2011-09-24 18:11

Pozostało 580 znaków

2011-09-24 18:05

Rejestracja: 12 lat temu

Ostatnio: 19 godzin temu

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.

Pozostało 580 znaków

2011-09-24 18:13

Rejestracja: 8 lat temu

Ostatnio: 1 rok temu

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.

EDYTUJ swoje posty, jeśli chcesz coś dodać/zmienić - nie twórz kolejnych po sobie... - madmike 2011-09-24 18:40

Pozostało 580 znaków

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