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

Błędnie działające menu

Ostatnio zmodyfikowano 2012-05-12 22:13
Autor Wiadomość
Trust
Temat założony przez niniejszego użytkownika
Błędnie działające menu
» 2012-05-12 14:41:39
Witam !!!

Mam dziwny problem z menu.
Jak niżej widzicie moje menu jest obsługiwane za pomocą myszki.
gdy najedziemy na jakiś element podświetli się on ( chyba wiadomo o co chodzi). Start, koniec mam oprogramowane i działa świetnie, natomiast głowię się nad powrotem z poziomu autorzy.
Niżej kod odpowiadający za obsługę buttona autorzy ( w komentarzach mam napisane co powinno się dziać i opisany problem który występuje w danym momencie), a na końcu kod odpowiadający za cale menu:
C/C++
else if( mx > 260 && mx < sx5 && my > 400 && my < sy6 ) // gdy najedziemy na button to się podświetla oraz z glośników wydobywa się dźwięk click
{
    play_sample( klik, 255, 255, 1000, 0 );
    blit( autorzy_zaznaczone, screen, 0, 0, 260, 500, autorzy_zaznaczone->w, autorzy_zaznaczone->h );
    if( mb == true ) // jak klikniemy to menu znika i wyświetlają się autorzy
    {
        blit( menu, screen, 0, 0, 0, 0, menu->w, menu->h );
        blit( autorzy_menu, screen, 0, 0, 0, 0, autorzy_menu->w, autorzy_menu->h );
        blit( powrot, screen, 0, 0, 395, 550, powrot->w, powrot->h );
       
        int px1 = 0, py2 = 0;
       
        px1 = 395 + 215;
        py2 = 550 + 59;
       
        while( !key[ KEY_ESC ] ) /* a tu zaczyna się problem gdy najadę na button powrot to on                                       powinien sie podświetlić, a nic sie nie dzieje. Petla dziala, bo po wcisnieciu esc wyłącza się gra. jak myślicie co może byc tego przyczyną ? */
        {
            rest( 100 );
           
            if( mx > 395 && mx < px1 && my > 550 && my < py2 )
            {
                blit( powrot_autorzy, screen, 0, 0, 395, 550, powrot_autorzy->w, powrot_autorzy->h );
                play_sample( klik, 255, 255, 1000, 0 );
                if( mb == true )
                {
                    break;
                   
                   
                }
            }
        }
    }
   
}
C/C++
while( !key[ KEY_ESC ] )
{
   
   
    if( mx != mouse_x || my != mouse_y || mb != mouse_b )
    {
        mx = mouse_x;
        my = mouse_y;
        mb = mouse_b;
    }
   
   
   
    int sx1 = 0, sx3 = 0, sx5 = 0, sx7 = 0, sy2 = 0, sy4 = 0, sy6 = 0, sy8 = 0;
   
    sx1 = 188 + 213; //stat
    sy2 = 400 + 41;
   
    sx3 = 220 + 213; //opcje
    sy4 = 450 + 41;
   
    sx5 = 260 + 213; //autorzy
    sy6 = 500 + 41;
   
    sx7 = 208 + 213; //wyjscie
    sy8 = 550 + 41;
   
   
   
    rest( 100 );
   
    blit( start, screen, - 20, 0, 188, 400, start->w, start->h );
    blit( opcje, screen, 0, 0, 220, 450, opcje->w, opcje->h );
    blit( autorzy, screen, 0, 0, 260, 500, autorzy->w, autorzy->h );
    blit( wyjscie, screen, 0, 0, 208, 550, wyjscie->w, wyjscie->h );
   
    if( mx > 188 && mx < sx1 && my > 400 && my < sy2 )
    {
        play_sample( klik, 255, 255, 1000, 0 );
        blit( start_zaznaczone, screen, 0, 0, 208, 400, start_zaznaczone->w, start_zaznaczone->h );
       
        if( mb == true ) break;
       
    } else if( mx > 220 && mx < sx3 && my > 400 && my < sy4 )
    {
        play_sample( klik, 255, 255, 1000, 0 );
        blit( opcje_zaznaczone, screen, 0, 0, 220, 450, opcje_zaznaczone->w, opcje_zaznaczone->h );
        if( mb == true ) break;
       
    } else if( mx > 260 && mx < sx5 && my > 400 && my < sy6 )
    {
        play_sample( klik, 255, 255, 1000, 0 );
        blit( autorzy_zaznaczone, screen, 0, 0, 260, 500, autorzy_zaznaczone->w, autorzy_zaznaczone->h );
        if( mb == true )
        {
            blit( menu, screen, 0, 0, 0, 0, menu->w, menu->h );
            blit( autorzy_menu, screen, 0, 0, 0, 0, autorzy_menu->w, autorzy_menu->h );
            blit( powrot, screen, 0, 0, 395, 550, powrot->w, powrot->h );
           
            int px1 = 0, py2 = 0;
           
            px1 = 395 + 215;
            py2 = 550 + 59;
           
            while( !key[ KEY_ESC ] )
            {
                rest( 100 );
               
                if( mx > 395 && mx < px1 && my > 550 && my < py2 )
                {
                    blit( powrot_autorzy, screen, 0, 0, 395, 550, powrot_autorzy->w, powrot_autorzy->h );
                    play_sample( klik, 255, 255, 1000, 0 );
                    if( mb == true )
                    {
                        break;
                       
                       
                    }
                }
            }
        }
       
    } else if( mx > 208 && mx < sx7 && my > 550 && my < sy8 )
    {
        play_sample( klik, 255, 255, 1000, 0 );
        blit( wyjscie_zaznaczone, screen, 0, 0, 208, 550, wyjscie_zaznaczone->w, wyjscie_zaznaczone->h );
        if( mb == true )
        {
            koniec_gry();
            allegro_exit;
            return 0;
        }
    }
   
   
}
P-56549
Admixior
» 2012-05-12 18:28:10
Nie wiem czy masz inny wątek który pobiera i umieszcza eventy w tablicy key[...] i pozycje myszki w mouse_* ,  ale tak to wygląda (chyba że obciąłeś kawałek kodu).

Zauważ w głównej pętli:
C/C++
if( mx != mouse_x || my != mouse_y || mb != mouse_b )
{
    mx = mouse_x;
    my = mouse_y;
    mb = mouse_b;
}

i jego brak w pętli
C/C++
while( !key[ KEY_ESC ] )
{
    rest( 100 );
   
    if( mx > 395 && mx < px1 && my > 550 && my < py2 ) // a tutaj jego użycie
    {
        blit( powrot_autorzy, screen, 0, 0, 395, 550, powrot_autorzy->w, powrot_autorzy->h );
        play_sample( klik, 255, 255, 1000, 0 );
        if( mb == true )
        {
            break;
           
           
        }
    }
}
Chyba to jest problemem.

A tak na marginesie:
C/C++
int sx1 = 0, sx3 = 0, sx5 = 0, sx7 = 0, sy2 = 0, sy4 = 0, sy6 = 0, sy8 = 0;

sx1 = 188 + 213; //stat
sy2 = 400 + 41;

sx3 = 220 + 213; //opcje
sy4 = 450 + 41;

sx5 = 260 + 213; //autorzy
sy6 = 500 + 41;

sx7 = 208 + 213; //wyjscie
sy8 = 550 + 41;
Czemu to jest przy każdym okrążeniu pętli wykonywane skoro się nie zmienia?
P-56562
Trust
Temat założony przez niniejszego użytkownika
» 2012-05-12 22:13:40
No tak teraz działa :)

A te wierzchołki już wywalam przed pętlę- nie przemyślałem tego.

Dzięki za pomoc !!! :)
P-56605
« 1 »
  Strona 1 z 1