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

[Allegro, C++] Problem z przyciskiem "Exit"

Ostatnio zmodyfikowano 2011-11-26 22:40
Autor Wiadomość
Voldo
Temat założony przez niniejszego użytkownika
[Allegro, C++] Problem z przyciskiem "Exit"
» 2011-11-26 18:01:20
Witam. Mam problem. Napisałem funkcję, która jest podpięta pod klawisz wyjście. Problem tkwi w tym, że po wciśnięciu ów klawisza nic się nie dzieje. 0 błędów 0 warmów, ale co z tego skoro przycisk nie działa?

Dodam tylko, że przycisk jest bitmapą.

Oto kod:
C/C++
bool exit1 = false;

if( mx >= 250 && my >= 200 && mx <= 250 + 231 && my <= 200 + 53 && mb == 1 )
{
    stop_sample( dzwiek );
    clear_bitmap( bufor );
    allegro_exit();
}


P-44766
Gabes
» 2011-11-26 19:19:51
Najlepiej sprawdzić same
if( mb == 1 )
 jeśli działa to masz bitmape w złym miejscu lub złe parametry mx i my. Lepiej dać
if( mb & 1 )
 odczytuje tylko lewy klawisz.
Dodaj
return 0;
P-44770
Voldo
Temat założony przez niniejszego użytkownika
Nie
» 2011-11-26 20:20:37
Niestety nic to nie dało
P-44777
Gabes
» 2011-11-26 20:28:23
Spróbuj zmienić mx ,my ,mb  na  mouse_x ,mouse_y ,mouse_b
Jeśli to nie pomoże to program nie dochodzi do  tego miejsca.
P-44778
SeaMonster131
» 2011-11-26 20:43:11
Hm..na pewno dobrze współrzędne wpisałeś? Poklikaj po całym ekranie i zobacz hah ;) No albo wyświetl sobie położenie myszki i wtedy spr.
P-44779
Voldo
Temat założony przez niniejszego użytkownika
» 2011-11-26 21:58:51
Może funkcja, która ma zamykać program jest po prostu zła :/

Już nie wiem co robić. Kombinuje jak słoń pod górkę....

Oto cały kod:
C/C++
#include <allegro.h>

int mb, mx, my;

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_WINDOWED, 740, 550, 0, 0 );
    clear_to_color( screen, makecol( 128, 128, 128 ) );
   
    install_mouse();
   
    enable_hardware_cursor();
    select_mouse_cursor( MOUSE_CURSOR_QUESTION );
    show_mouse( screen );
    unscare_mouse();
    clear_to_color( screen, makecol( 128, 128, 128 ) );
    install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" );
    set_volume( 255, 255 );
   
    BITMAP * bufor = NULL;
    SAMPLE * dzwiek = NULL;
    BITMAP * gracpp = NULL;
    BITMAP * uruchom = NULL;
    BITMAP * ustawienia = NULL;
    BITMAP * tworcy = NULL;
    BITMAP * wyjsc = NULL;
   
   
    gracpp = load_bmp( "gracpp.bmp", default_palette );
    if( !gracpp )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie mogê za³adowaæ obrazka Ludek !" );
        allegro_exit();
        return 0;
    }
   
    uruchom = load_bmp( "uruchom.bmp", default_palette );
    if( !uruchom )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie mogê za³adowaæ obrazka uruchom !" );
        allegro_exit();
        return 0;
    }
   
    ustawienia = load_bmp( "ustawienia.bmp", default_palette );
    if( !ustawienia )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie mogê za³adowaæ obrazka ustawienia !" );
        allegro_exit();
        return 0;
    }
   
    tworcy = load_bmp( "tworcy.bmp", default_palette );
    if( !tworcy )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie mogê za³adowaæ obrazka tworcy !" );
        allegro_exit();
        return 0;
    }
    wyjsc = load_bmp( "wyjsc.bmp", default_palette );
    if( !wyjsc )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie mogê za³adowaæ obrazka wyjsc !" );
        allegro_exit();
        return 0;
    }
    bufor = create_bitmap( 740, 550 );
   
    dzwiek = load_sample( "Campain.wav" );
    if( !dzwiek )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie mogê za³adowaæ dzwieku !" );
        allegro_exit();
        return 0;
    }
    play_sample( dzwiek, 255, 127, 1000, 1 );
   
    while( !key[ KEY_ESC ] )
    {
        blit( gracpp, bufor, 0, 0, 0, 0, gracpp->w, gracpp->h );
        blit( uruchom, bufor, 0, 0, 250, 200, uruchom->w, uruchom->h );
        blit( ustawienia, bufor, 0, 0, 250, 260, ustawienia->w, ustawienia->h );
        blit( tworcy, bufor, 0, 0, 250, 320, tworcy->w, tworcy->h );
        blit( wyjsc, bufor, 0, 0, 250, 378, wyjsc->w, wyjsc->h );
        blit( bufor, screen, 0, 0, 0, 0, 740, 550 );
        if( key[ KEY_F1 ] ) { adjust_sample( dzwiek, 255, 127, 500, 1 ); }
        if( key[ KEY_F2 ] ) { adjust_sample( dzwiek, 255, 127, 2000, 1 ); }
        if( key[ KEY_F3 ] ) { adjust_sample( dzwiek, 255, 0, 1000, 1 ); }
        if( key[ KEY_F4 ] ) { adjust_sample( dzwiek, 255, 255, 1000, 1 ); }
    }
    while( !key[ KEY_ESC ] )
    {
        myszka();
        blit( gracpp, bufor, 0, 0, 0, 0, gracpp->w, gracpp->h );
        blit( uruchom, bufor, 0, 0, 250, 200, uruchom->w, uruchom->h );
        blit( ustawienia, bufor, 0, 0, 250, 260, ustawienia->w, ustawienia->h );
        blit( tworcy, bufor, 0, 0, 250, 320, tworcy->w, tworcy->h );
        blit( wyjsc, bufor, 0, 0, 250, 378, wyjsc->w, wyjsc->h );
        blit( bufor, screen, 0, 0, 0, 0, 740, 550 );
    }
    stop_sample( dzwiek );
    clear_bitmap( bufor );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-44786
malan
» 2011-11-26 22:11:05
1.
C/C++
while( !key[ KEY_ESC ] )
{
    myszka();
    blit( gracpp, bufor, 0, 0, 0, 0, gracpp->w, gracpp->h );
    blit( uruchom, bufor, 0, 0, 250, 200, uruchom->w, uruchom->h );
    blit( ustawienia, bufor, 0, 0, 250, 260, ustawienia->w, ustawienia->h );
    blit( tworcy, bufor, 0, 0, 250, 320, tworcy->w, tworcy->h );
    blit( wyjsc, bufor, 0, 0, 250, 378, wyjsc->w, wyjsc->h );
    blit( bufor, screen, 0, 0, 0, 0, 740, 550 );
}
To jest ta Twoja "funkcja", która ma się "wywołać" po wciśnięciu klawisza ESC?

Przed tą pętlą dodaj linijkę:
while( key[ KEY_ESC ] );
.

2. Nie zwalniasz zasobów (tj. bitmap).
P-44787
Voldo
Temat założony przez niniejszego użytkownika
Czy to pomoże?
» 2011-11-26 22:21:26
Jeżeli dodam linijkę, którą pisałeś przed pętlą daje ona mi tylko tyle, że aby teraz wyjść z programu muszę nacisnąć ESC 2 razy. Czy zwalnianie pamięci czyli destroy, o które tobie zapewne chodzi rozwiąże mój problem?

Wykombinowałem coś takiego:

C/C++
if( mx >= 250 && my >= 200 && mx <= 250 + 231 && my <= 200 + 53 && mb == 1 )
{
    stop_sample( dzwiek );
    clear_bitmap( bufor );
    while( !exit1 )
    {
        exit = true;
        blit( bufor, screen, 0, 0, 0, 0, 740, 550 );

Niby się kompiluje jednak nadal coś nie trybi.

P-44789
« 1 » 2
  Strona 1 z 2 Następna strona