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

[Allegro, C++] Obsługa menu za pomocą myszki i klawiatury

Ostatnio zmodyfikowano 2011-11-25 14:14
Autor Wiadomość
CTRL85
Temat założony przez niniejszego użytkownika
[Allegro, C++] Obsługa menu za pomocą myszki i klawiatury
» 2011-11-24 20:39:22
C/C++
menu = 0;
draw_sprite( screen,( BITMAP * ) pliki[ stol ].dat, 0, 0 );
while( speed > 0 || !key[ KEY_ESC ] )
{
    if( key[ KEY_UP ] )
         menu--;
   
    if( key[ KEY_DOWN ] )
         menu++;
   
    if( menu < 0 )
         menu = 3;
   
    if( menu > 3 )
         menu = 0;
   
    if( key[ KEY_ENTER ] )
         break;
   
    if( key[ KEY_ESC ] )
         zwolnij_pamiec();
   
    switch( menu )
    {
    case 0:
        {
            menu_glowne =( BITMAP * ) pliki[ menu_NowaGra ].dat;
            masked_blit( menu_glowne, screen, 0, 0, 295, 60, menu_glowne->w, menu_glowne->h );
            break;
        }
    case 1:
        {
            menu_glowne =( BITMAP * ) pliki[ menu_Zasady ].dat;
            masked_blit( menu_glowne, screen, 0, 0, 295, 60, menu_glowne->w, menu_glowne->h );
            break;
        }
    case 2:
        {
            menu_glowne =( BITMAP * ) pliki[ menu_Credits ].dat;
            masked_blit( menu_glowne, screen, 0, 0, 295, 60, menu_glowne->w, menu_glowne->h );
            break;
        }
    case 3:
        {
            menu_glowne =( BITMAP * ) pliki[ menu_Wyjscie ].dat;
            masked_blit( menu_glowne, screen, 0, 0, 295, 60, menu_glowne->w, menu_glowne->h );
            break;
        }
        default:
        {
            menu_glowne =( BITMAP * ) pliki[ menu_NowaGra ].dat;
            masked_blit( menu_glowne, screen, 0, 0, 295, 60, menu_glowne->w, menu_glowne->h );
            break;
        }
    }
    readkey();
    speed--;
}
}

Mam taki kod. Działa on znakomicie przy obsłudze menu klawiaturą w mojej grze, ale wiele osób mówiło mi, żebym dorobił obsługe myszki. Tutaj zaczyna się problem. Czy aby dodać obsługę myszką muszę pozmieniać switch i case na if'y, czy da się to jakoś dołożyć?
P-44660
SeaMonster131
» 2011-11-24 20:42:19
Hm...ja bym zostawił ten kod, dorobił tylko obsługę myszki :) Albo go po prostu częściowo wywalił i zrobił tylko samą myszkę... ;p
P-44661
CTRL85
Temat założony przez niniejszego użytkownika
» 2011-11-24 21:30:37
Tego kodu nie wywalę, bo zależy mi żeby można było wybierać i klawą i myszką... jak "dorobić tylklo obsługę myszki"? Musiałbym pozamieniać na if'y i nie było by problemu:
if(menu == 0 || mouse_x > liczba && mause_y > liczba)
P-44662
hincu
» 2011-11-24 21:32:37
pobieraj pozycje x,y myszki i porownaj je czy sa na danej pozycji (tutaj wysokosc i szerokosc) danego objektu w menu jesli pozycja sie zgadza to podswietl : P a gdy kliknie to wywolaj dany event
P-44663
CTRL85
Temat założony przez niniejszego użytkownika
» 2011-11-24 22:11:48
Wiem jak to zrobić, ale sie pytam, czy można użyć do tego switcha :P
P-44665
malan
» 2011-11-24 22:58:45
Wiem jak to zrobić, ale sie pytam, czy można użyć do tego switcha :P
Do obsługi myszki? Można, ale if sprawdzi się lepiej.

Wiesz, że ten Twój switch można zastąpić jedną linijką?
Przy założeniu, że:
menu_NowaGra = 0
menu_Zasady  = 1
menu_Credits = 2
menu_Wyjscie = 3
menu_NowaGra = 4
kod mógłby wyglądać tak:
C/C++
masked_blit(( BITMAP * ) pliki[ menu ].dat, screen, 0, 0, 295, 60,( BITMAP * ) pliki[ menu ].dat->w,( BITMAP * ) pliki[ menu ].dat->h );
P-44667
CTRL85
Temat założony przez niniejszego użytkownika
» 2011-11-25 14:14:23
Dzięki za odpowiedzi :)
P-44684
« 1 »
  Strona 1 z 1