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.8.1.171 • 2024.8.1.218
wydana 74 dni temu
LTS
2022.0.3.83 • 2022.0.3.98
wydana  2 dni temu
Beta
2024.1100.0.686 •
2024.1100.0.707
 0.13.0

wydana 8 dni temu
= IDE, = Runtime, = GMRT
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
Shoutbox
gnysek (11:46, 17.11.24)
Witamy, witamy!
baca (12:22, 16.11.24)
To już 25 lat.. Witam po paru latach nieobecności.
gnysek (11:05, 15.11.24)
Natomiast obecne forum istnieje od 2004, jak z iglu.cz na gmclan.org przeszliśmy i od tego czasu nie było resetów danych.
gnysek (12:35, 13.11.24)
Ogólnie GMCLAN istnieje 22 lata, ale na to trofeum nie zrobiłem (jeszcze xD)
Chell (20:41, 08.11.24)
wow, ta emotka w ogóle nie wygląda jak : O xD
Chell (20:40, 08.11.24)
tylko? :O 4tk ma 15
Borek (18:12, 07.11.24)
Właśnie dostałem powiadomienie z forum, że jestem na GMClanie 18 lat :D Ja pierdzielę...
S
Sutikku (08:43, 18.10.24)
TIL, gamemaker jest starszy ode mnie
gnysek (16:04, 15.10.24)
Za równo miesiąc, GameMaker kończy 25 lat.
Wojo (15:38, 05.09.24)
Ciekawe
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?