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

Kursor miga [allegro]

Ostatnio zmodyfikowano 2010-05-13 11:03
Autor Wiadomość
McAffey
Temat założony przez niniejszego użytkownika
Kursor miga [allegro]
» 2010-05-12 23:00:27
Witam! Mam problem z kursorem. Podczas poruszania myszką mocno mruga, a gdy nią nie ruszam, to znika całkowicie. Dzieje się tak tylko gdy mam ustawiony pełny ekran a gdy mam windowed to wszystko jest w porządku. Mruga i standardowy i własny (załadowany). Niestety patent podany w poście z linku ( http://forum.ddt.pl/?Tid=1959 ) nie działa. Macie jakieś pomysły ? Dziękuję i pozdrawiam
P-16807
malan
» 2010-05-12 23:05:14
Może kota się boi? Schowaj go tak, żeby myszka nie widziała :).
Tak na poważnie to my tu czarować nie potrafimy ( chociaż niektórzy... ;) ) - KOD :).
P-16808
McAffey
Temat założony przez niniejszego użytkownika
» 2010-05-12 23:08:44
Myślałem, że się obejdzie bez gdyż nie ma w nim wiele. Już daję :
C/C++
#include <allegro.h>

BITMAP * kursor;

void laduj_kursor()
{
    kursor = load_bitmap( "kursor.bmp", NULL );
    if( !kursor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac grafiki ( kursor )" );
        allegro_exit();
    }
};

int mx = 0, my = 0, 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( 16 );
    set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 1280, 1024, 0, 0 );
   
    laduj_kursor();
    install_mouse();
    show_mouse( screen );
    set_mouse_sprite( kursor );
    unscare_mouse();
   
    clear_to_color( screen, makecol( 0, 0, 180 ) );
   
    BITMAP * bufor = NULL;
    BITMAP * tlo = NULL;
    BITMAP * planeta1 = NULL;
   
    bufor = create_bitmap( 1280, 1024 );
    tlo = load_bmp( "tlo.bmp", default_palette );
    planeta1 = load_bmp( "planeta1.bmp", default_palette );
   
    int widok;
    widok = 1;
   
    while( !key[ KEY_ESC ] )
    {
        clear_to_color( bufor, makecol( 0, 0, 0 ) );
        myszka();
       
        draw_sprite( bufor, tlo, 0, 0 );
       
        if( widok == 1 )
        {
            draw_sprite( bufor, planeta1, 300, 600 );
        }
       
        blit( bufor, screen, 0, 0, 0, 0, 1280, 1024 );
    }
    destroy_bitmap( bufor );
    destroy_bitmap( tlo );
    destroy_bitmap( planeta1 );
    destroy_bitmap( kursor );
   
    allegro_exit();
    return 0;
}
END_OF_MAIN();

Po wzięciu w komentarz te dwa rysowania (tlo i planeta1) nadal miga.
P-16809
malan
» 2010-05-12 23:14:16
set_color_depth(32);
Chociaż wątpię żeby to coś dało...

clear_to_color(screen, makecol(0,0,180));
To też raczej niepotrzebne ;p.
P-16810
McAffey
Temat założony przez niniejszego użytkownika
» 2010-05-12 23:23:46
Niestety nie pomogło... Jakieś inne pomysły ;) ??
P-16811
DejaVu
» 2010-05-13 09:08:01
To akurat jest proste - jeżeli używasz buforowania nie wyświetlaj myszki za pomocą standardowego mechanizmu. Po prostu rysuj bitmapę myszki na buforze na pozycji X,Y, którą możesz pobrać nawet jeśli myszka jest niewidoczna na ekranie.
P-16812
McAffey
Temat założony przez niniejszego użytkownika
» 2010-05-13 11:03:18
Niby genialne w swej prostocie, ale jak zrobiłem
show_mouse(NULL);
I w głównej pętli tuż nad wyświetlaniem bufora na ekran dodałem
draw_sprite(bufor, kursor, mx, my); 
 to kursor pojawia się na ekranie ale w lewym górnym rogu i się z niego nie chce ruszyć. Jakieś rady ;) ??

Edit:

Idiota ze mnie, nie zauważyłem, że po różnych kombinacjach została mi w komentarzu "myszka();" czyli, program nie wiedział co to "mx" i "my". Dzięki wszystkim już wszystko działa jak powinno.
P-16813
« 1 »
  Strona 1 z 1