[Allegro, C++] Przyciśnięty przycisk myszy nie chce wracaćna swoje miejce.
Piszę początki ekranu powitalnego, który uruchamia grę. Fanie mi wyszło ze zmianą obrazu itd. Problem mam jednak w tym, że gdy na pierwszym ekranie naciskam przycisk myszy to na drugim jest on dalej wciśnięty. Wskaźnikiem dla tego jest u mnie bitmapa apple.bmp. Niestety zamiast czekać na drugim ekranie na ponowne wciśniecie klawisza myszy jabłuszko od razu się pojawia. Proszę o pomoc.
#include <allegro.h>
BITMAP * bufor = NULL;
BITMAP * mapa = NULL;
BITMAP * jablko = NULL;
int mx = 0, my = 0, mb = 0;
bool bwskaznik = false;
void myszka()
{
if( mx != mouse_x || my != mouse_y || mb != mouse_b )
{
mx = mouse_x;
my = mouse_y;
mb = mouse_b;
}
};
void polozenie()
{
myszka();
textprintf_ex( bufor, font, 20, 20, makecol( 200, 200, 200), -1, "Poz X = %d", mx);
textprintf_ex( bufor, font, 20, 30, makecol( 200, 200, 200), -1, "Poz Y = %d", my);
textprintf_ex( bufor, font, 20, 40, makecol( 200, 200, 200), -1, "Klawisz = %d", mb);
blit( bufor, screen, 0, 0, 0, 0, 800, 600);
clear_keybuf();
};
void jabluszko()
{
jablko = load_bmp( "apple.bmp", default_palette);
masked_blit(jablko, bufor, 0, 0, 600, 300, jablko->w, jablko->h);
};
void EkranPowitalny()
{
BITMAP * MapaEkranPowitalny = NULL;
bool KoniecEkranuPowitalnegobool = false;
MapaEkranPowitalny = load_bmp( "tux.bmp", NULL);
while( KoniecEkranuPowitalnegobool == false )
{
myszka();
clear_to_color(bufor, makecol( 150, 150, 150));
masked_blit( MapaEkranPowitalny, bufor, 0, 0, 0, 0, 800, 600);
blit( bufor, screen, 0, 0, 0, 0, 800, 600);
if( mb == 1 )
{
KoniecEkranuPowitalnegobool = true;
bwskaznik = true;
}
}
};
int main()
{
allegro_init();
install_keyboard();
set_color_depth( 16 );
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
install_mouse();
show_mouse( screen );
unscare_mouse();
clear_to_color(screen, makecol(128,128,128));
bufor = create_bitmap( 800, 600 );
if(!bufor)
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0);
allegro_message("nie moge utworzyc bufora");
allegro_exit();
return 0;
}
mapa = load_bmp( "mapa2.bmp", NULL );
if(!mapa)
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0);
allegro_message( "nie moge zaladowac mapy" );
allegro_exit();
return 0;
}
bool klik = false;
while( !key[KEY_ESC])
{
if(bwskaznik == false)
{
EkranPowitalny();
}
clear_to_color(bufor, makecol( 150, 150, 150));
masked_blit( mapa, bufor, 0, 0, 0, 0, 800, 600);
if( mb == 1 )
{
klik = true;
}
if( klik == true )
{
jabluszko();
}
polozenie();
blit( bufor, screen, 0, 0, 0, 0, 800, 600);
}
destroy_bitmap( mapa );
destroy_bitmap( bufor );
allegro_exit();
return 0;
}
END_OF_MAIN();