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

[Allegro] Migajacy kursor, oraz wylaczenie programu.

Ostatnio zmodyfikowano 2009-09-12 14:27
Autor Wiadomość
pedros
Temat założony przez niniejszego użytkownika
[Allegro] Migajacy kursor, oraz wylaczenie programu.
» 2009-09-11 19:20:59
Witam. Postanowiłem napisać banalne menu w bibliotece Allegro, c++ i mam problem. A mianowicie: po pierwsze miga mi kursor, a po drugie program ma sie wylaczac po naciśnięcie esc. Wylacza sie jedynie gdy program odpalam w fullscreenie, a mi zalezy aby program mozna bylo odpalac w trybie okienkowym. Oto kod programu:


C/C++
#include <allegro.h>

BITMAP * kursor;

void laduj_kursor()
{
    kursor = load_bitmap( "myszka.bmp", NULL );
    if( !kursor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac obrazka kursora!" );
        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, 640, 480, 0, 0 );
    clear_to_color( screen, makecol( 200, 200, 200 ) );
    install_mouse();
    show_mouse( screen );
    unscare_mouse();
   
   
    BITMAP * bufor = NULL;
    BITMAP * menu = NULL;
   
    bufor = create_bitmap( 640, 480 );
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge utworzyc bufora !" );
        allegro_exit();
        return 0;
    }
    laduj_kursor();
    set_mouse_sprite( kursor );
    myszka();
   
    menu = load_bmp( "menu.bmp", default_palette );
    if( !menu )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac obrazka menu !" );
        allegro_exit();
        return 0;
    }
   
    int menu_x = 10, menu_y = 20;
   
    while( !key[ KEY_ESC ] )
    {
        clear_to_color( bufor, makecol( 200, 200, 200 ) );
       
       
        masked_blit( menu, bufor, 0, 0, menu_x, menu_y, menu->w, menu->h );
        blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
    }
   
    destroy_bitmap( bufor );
    destroy_bitmap( menu );
    destroy_bitmap( kursor );
    allegro_exit();
    return 0;
   
   
}
END_OF_MAIN();


Probowalem juz chyba wszystkiego. Prosze o pomoc.
P-10167
DejaVu
» 2009-09-11 20:22:44
Popraw linijkę:
C/C++
set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0 );

/edit:
Sprawa kursora myszy + buforowania została już niejednokrotnie wyjaśniona na forum. Nie wyświetlaj kursora - pobieraj jego pozycję i rysuj bitmapę w odczytanym miejscu na buforze.
P-10171
pedros
Temat założony przez niniejszego użytkownika
» 2009-09-12 12:22:18
Dzieki. Przepraszam za powtorzenie pytania, ale jak poprawic ten kod. Wiem ze aktualnie program jest ustawiony na fullscreen ale co zrobic aby program okienkowy rowniez zamykal sie po nacisnieciu esc.??
P-10188
DejaVu
» 2009-09-12 14:27:24
Będzie się zamykał jeśli będzie okienko aktywne.
P-10190
« 1 »
  Strona 1 z 1