Ten artykuł został stworzony dla starszych wersji GameMakera i może nie być aktualny.

Efektowne menu

Niedziela, 25 Września 2005, 21:13
Czas czytania 2 minuty, 18 sekund
Zgodne z GM: gm6
Jak zrobić zaawansowane menu.
TYLKO GAME MAKER 6.1

tworzymy nowy obiekt obj_menu. Dajemy kod w create:
kodalpha=0;
step=0;
kursor=0;
m[0]='Nowa gra';
m[1]='Wczytaj Grę';
m[2]='Zakończ';
kursor_max=2;
teraz dajemy kod w step:
kodif step=0
{
if alpha<1 then alpha+=0.1 else{
alpha=1;
step=1;
}
}

if step=2
{
if alpha>0 then alpha-=0.1 else{
instance_destroy();
}
}
w draw:
koddraw_set_alpha(alpha);
for (i=0; i<=kursor_max; i+=1;)
{
if i=kursor then draw_set_color(c_white) else draw_set_color(c_black);
draw_text(0,0+(40*i),m[i]);
}
w key press up dajemy kod:
kodif step=1
{
if kursor>0 then kursor -=1 else kursor=kursor_max;
//ewentualnie: sound_play(muzyczka);
}
w key press down dajemy kod:
kodif step=1
{
if kursor<kursor_max then kursor +=1 else kursor=0;
//ewentualnie: sound_play(muzyczka);
}
w key_press enter dajemy kod
kodif step=1
{
step=2;
//ewentualnie: sound_play(muzyczka);
}
i na sam koniec w on destroy dajemy kod:
kod
draw_set_alpha( 1 );
switch kursor
{
case 0: /*gdy wybrano nowa gra*/; break;
case 1: /*gdy wybrano wczytaj*/; break;
default: game_end();
}

Teraz tłmaczę o co chodzi:
W CREATE definiujemy zmienną alpha, która odpowiada za rozjaśnianie i przyciemnianie menu.
Zmienna step pomaga nam to kontrolować.
Zmienna kursor odpowiada za aktualną pozycję kursora.
Zmienne m[0]...m[n] odpowiadają za kolejne pozycje w menu
Zmienna kursor_max, musi być równa liczbie n z poprzedniej zmiennej (w tym wypadku 2)

W STEP zajmujemy się opoeracjami na rozjaśnianiu i przyciemnianiu menu.

W KEY_UP i KEY_DOWN operujemy na zmianie pozycji kursora, ale tylko gdy step=1 czyli menu jest widoczne i ani się nie rozjaśnia, ani też nie przyciemnia.

W ENTER nakazujemy się obiektowi przyciemniać, zmieniając step na dwa, tym samym unieruchamiając operacje na kursorze. Akcja w step doporowandzi do powolnego zniknięcia menu, a na końcu zniszczy go.

W DESTROY dajemy akcje jakie nalezy wykonać po wybarniu konkretnego menu. Dajemy je dopiero tutaj, bo w tym momencie obiekt zniknął, więc musi się coś wydarzyć. Najlepiej zrozumiesz to gdy zobaczysz skrypt w akcji.

W DRAW w pętli FOR, malujemy menu. Ustawiamy prześwitywalność na alpha, można dodatkowo ustawic rozmiar czcionki (przed pętlą). W pętli ustawiamy kolor czcionki na czarny, lub na biały gdy aktualny tekst odpowiada pozycji kursora.

Dla początkujących skrypt ten może być dość skomplikowany, ale sam strouję go w praktyce od dość dawna, w róznych modyfikacjach (nie tylko do menu, ale np. do plansz z wpisywaniem imienia, plansz tekstowych, oraz plansz z pytaniami). Po drobnych modyfikacjach w draw, można uzyskac naprawdę wspaniałe efekty, włącznie z kursorem oraz tłem dla menu. Ten sam skrypt został zastrosowany w 80% moich gier.
Komentarze (łącznie 63, wyświetlam 46 - 60):
kamcio540 (Wto., 27 Kwi. 10, 18:50)
#46

thx

kamcio540 (Wto., 27 Kwi. 10, 18:53)
#47

ERROR in
action number 1
of Draw Event
for object obj_menu:

Error in code at line 5:
draw_text(0,0+(40*i),m[i]);

at position 23: Unknown variable m or array index out of bounds

D
Dawka83 (Wto., 27 Kwi. 10, 18:55)
#48

za duża pętla daj całą.

kamcio540 (Wto., 27 Kwi. 10, 18:56)
#49

jaka pętla??

D
Dawka83 (Wto., 27 Kwi. 10, 18:59)
#50

ta co rysuje w draw zmniejsz zakres i

kamcio540 (Wto., 27 Kwi. 10, 18:59)
#51

np na jaką wartość?

D
Dawka83 (Wto., 27 Kwi. 10, 19:00)
#52

na wartość 1

kamcio540 (Wto., 27 Kwi. 10, 19:03)
#53

nadal ten bład wyskakuje

ERROR in
action number 1
of Draw Event
for object obj_menu:

Error in code at line 5:
draw_text(0,0+(1*i),m[i]);

at position 22: Unknown variable m or array index out of bounds

Marek Siemaszko (Wto., 27 Kwi. 10, 23:29)
#54

1 * i = i
:P

iteruj od zera i przypisuj tablice również od 0, nie będzie problemu.

E:
w create daj
kursor_max = 1;

Smo (Czw., 11 Lis. 10, 11:33)
#55

A jak to menu zrobić pod GM8 PRO?

Muuuuczek567 (Czw., 11 Lis. 10, 11:46)
#56

Tak samo?

Smo (Czw., 11 Lis. 10, 12:25)
#57

Ale tam jest napisane, że to pod GM 6.1 ;(

eltix (Czw., 11 Lis. 10, 12:32)
#58

pod 8 też pójdzie

gnysek (Czw., 11 Lis. 10, 16:40)
#59

Ja nie wiem, jakby nie można najpierw sprawdzić a potem pytać...

eltix (Czw., 11 Lis. 10, 20:02)
#60

ano, każdy woli pójść na łatwiznę. 'A może kto inny sprawdzi i mi potem powie...'

Najnowsze wersje GameMakera:

Stabilna
2024.14.4.222 • 2024.14.4.268
wydana 89 dni temu
LTS
2026.0.0.16 • 2022.0.3.99
wydana 35 dni temu
Beta
2024.1400.5.1065 •
2024.1400.5.1031
 0.20.0

wydana 50 dni temu
= IDE, = Runtime, = GMRT
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
41 użytkowników online na discordzie:
Miłosz, 🧁Cupcake🧁, Grela, Nikas, Alice, HappyOrange, LeD, Nitro Slav, Carl-bot, Fox, GibkiKaktus, Wielki Druid, Destiny, Kuzyn, GMRussell, fervi, r..., Threef, Uzjel, s..., Murrri, Jarkozpl, yazaa, Dyno, szmalu, Morro, OdrzuconyKrakers, Ulti, Kandif, tertegier1137, Danieo, bagno, Arrekin, Mtax, MrTesterr, g..., Borek, moeglich, Add92, h..., Shockah
Shoutbox
Wojo (21:21, 28.06.26)
na ten moment czerwiec prezentuje się dość przyzwoicie jesli chodzi o ilosc wpisow w shoutboxie bo aż trzy! a taki styczeń zero :0
gnysek (15:06, 10.06.26)
oraz pokój na świecie
Kuzyn (17:16, 08.06.26)
i urlop
gnysek (11:13, 05.05.26)
czekamy na GMRT
Wojo (14:53, 04.05.26)
Co tak cicho?
gnysek (11:01, 30.04.26)
Grill panie, grill.
Wojo (14:18, 29.04.26)
Jak planujecie spędzić najbliższą majówkę?
Wojo (13:15, 13.03.26)
Ja zainstalowałem sobie Linux mint na swoim laptopie :)
Wojo (10:21, 12.02.26)
Tak, po zmianach gmclan przeżywa drugą młodość. Najnowsze trendy wskazują, że ten rok będzie rokiem Linuxa, rokiem odejścia od Facebooka i rokiem odejścia od discorda na rzecz forów internetowych B)
K
Kamilek (21:57, 08.12.25)
Ale klimat tu znowu wrócić! :-D
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?