Először egy egyszerű menüt fogunk készíteni. Szerencsére a Godot Engine elég sok előre elkészített elemet tartalmaz, hogy megkönnyítse a munkánkat.
A Főmenü létrehozása
Az előző részből megismert módon hozzunk létre New Project-et és nevezzük el pl. "Arkanoid tutorial"-nak. A Project Settings-ben (General - Display - Window) ismét válasszuk a 2d és a keeplehetőséget, a méret pedig legyen 1280×720.
Ha megnyílt az új projektünk, akkor bal oldalon a scene tree-ben válasszuk ki a User Interface-t, és a létrejövő Controlnode-ot nevezzük el "Menu"-nek és mentsük is el. Adjunk hozzá egy VBoxContainer node-ot - [Ctrl + A] - és nevezzük el "Gombok"-nak. A fenti ikonsoron kattintsunk a Layout-ra, a lenyíló menüben, pedig a Full Rect-re.
A jobb oldali panelen állítsuk az Alignment-et Center-re, a Margin - Left értékét 200-ra, Right értékét -200-ra, a Custom Constants - Seperation értékét pedig 50-re.
A Gombok node-hoz adjunk hozzá egy Button-t, és állítsuk be a jobb oldali panelen, (a Rect almenüben) a Min Size - y értékét 100-ra.
Töltsük le a Montserrat betűtípust (vagy akár sajátot is használhatunk, lényeg, hogy legyenek benne ékezetes karakterek). A linkelt csomagban elég sokféle variáció található, válasszunk ki egyet és másoljuk be a játék főkönyvtárába.
A Custom Fonts-nál válasszuk a New Dynamic Font lehetőséget, majd kattintsunk rá ismét. A lenyíló menüben válasszuk a Font-ot, majd kattintsunk az empty-re aztán a Load-ra és válasszuk ki a betűtípusunkat. Kettővel feljebb, a Settings-nél adhatunk meg nagyobb méretet, pl. 40-et. Ha sikerült beállítanunk, akkor eggyel feljebb, a Font mező jobb oldalán kattintsunk a lefelé mutató nyílra és válasszuk a Save lehetőséget, és mentsük el pl. "menu_font.tres" néven, így máshol is fel tudjuk majd használni.
Hozzunk létre két másolatot a Button-ról - [Ctrl + D]. Nevezzük el a három gombot: "Jatek", "Beallitasok" és "Kilepes". Az adott gombokon, a jobb oldali panel Text mezőjébe írt szöveg fog megjelenni - itt már használhatunk ékezetes karaktereket is. Legyenek ezek értelemszerűen: Játék, Beállítások és Kilépés.
A Főmenü scriptelése I.
Jelöljük ki a Menu nevű node-ot és adjunk hozzá egy script-et (a felette lévő tekercs ikonnal, vagy jobb egérgombbal kattintva az Attach Script lehetőséget választva). Állítsuk a Template-et Empty-re, majd kattintsunk a Create gombra. Ne írjunk még semmit, helyette kattintsunk a Jatek nevű node-ra, majd a jobb oldali panelen váltsunk át a Node fülre és kattintsunk duplán a pressed()Signal-ra.
Válasszuk ki a Menunode-ot (mást nem is tudunk, mivel csak ehhez van script hozzáadva), majd kattintsunk a Connect gombra.
Ismételjük ezt meg a másik két gombbal is. Ha ez megvan, akkor valahogy így kéne kinéznie a kódnak:
extends Control
# ha a Játék gomb meg lett nyomva
func _on_Jatek_pressed():
pass # Replace with function body.# ha a Beállítások gomb meg lett nyomva
func _on_Beallitasok_pressed():
pass # Replace with function body.# ha a Kilépés gomb meg lett nyomva
func _on_Kilepes_pressed():
pass # Replace with function body.
Láthatjuk, hogy az így létrejövő új függvény - func - mindig tartalmazza a küldő node nevét, és azt, hogy melyik signal-t küldte. Létrehozáskor a fent látható Receiver Method mezőben adhatunk neki saját nevet is, de erre általában nincs szükség.
Megtehetjük azt is, hogy több különböző signal Receiver Method-jának is ugyanazt a nevet adjuk, így ugyanazt a függvényt több különböző signal is hívhatja.
Ha most elindítjuk a játékot (miután megadtuk main scene-nek a Menu-t), akkor már tudunk kattintani a gombjainkra, de még nem fog történni semmi. Zárjuk be az ablakot és térjünk vissza a script-hez. Először a Kilépés kódját fogjuk megírni, mert az a legegyszerűbb, és egyből látható is a hatása. Módosítsuk a kódot a következőképpen:
A következő gomb a Beállítások, ez már izgalmasabb lesz. Először is hozzunk létre egy új scene-t (szintén User Interface), nevezzük el BeallitasokMenu-nek és mentsük el.
Adjunk a BeallitasokMenu-höz is egy VBoxContainer-t "Gombok" néven ugyanazokkal a beállításokkal, mint az előző (a Margin lehet nagyobb). Ehhez adjunk hozzá egy CheckBox node-ot és a Min Size - y értékét ennek is állítsuk 100-ra. A Custom Fonts-nál kattintsunk az empty-re, majd a Load-ra és válasszuk ki a korábban elmentett menu_font.tres fájlt. A Custom Constants - Hseparation értéke legyen 20.
A betűtípus méretének állításától a jelölőnégyzet mérete nem fog változni, de a Custom Icons mezőben használhatunk egyedi jelölőnégyzetet.
Duplikáljuk a CheckBox-ot. Nevezzük el őket "Hangok" és "TeljesKepernyo" néven. A Text mezőikben pedig Hangok és Teljes képernyő legyen. A HangoknodePressed mezőjét pipáljuk be.
Kattintsunk ismét a Gomboknode-ra és adjunk hozzá egy Button-t "Vissza" néven, a Text mezőbe is írjuk be ugyanezt, valamint a Min Size - y értéke itt is legyen 100. A Custom Fonts-nál ehhez is adjuk hozzá a menu_font.tresnevű fájlt.
A Főmenü scriptelése II.
Térjünk vissza a Menuscript-hez és módosítsuk a Beállítások részt:
func _on_Beallitasok_pressed():
# a zárójelben van a fájl elérési útvonala# "res://" a játék főkönyvtára, ebből nem léphetünk ki
get_tree().change_scene("res://BeallitasokMenu.tscn")
Próbáljuk ki! Ha minden jól ment, akkor a Beállítások-ra kattintva átkerülünk a BeallitasokMenu-be. Mivel ehhez még nem írtunk script-et, ezért itt egyelőre nem is tudunk csinálni semmit. Zárjuk be az ablakot.
A Beállítások menü scriptelése
Adjunk hozzá egy script-et a BeallitasokMenunode-hoz és a korábban használt módszerrel hozzunk létre egy-egy pressed()signal-t a két CheckBox-ból és Vissza gombból. Ha ez megvan, valahogy így fog kinézni a kódunk:
extends Control
# ha meg lett nyomva a Hangok jelölőnégyzet
func _on_Hangok_pressed():
pass # Replace with function body.# ha meg lett nyomva a Teljes képernyő jelölőnégyzet
func _on_TeljesKepernyo_pressed():
pass # Replace with function body.# ha meg lett nyomva a Vissza gombfunc _on_Vissza_pressed():
# a zárójelben van a fájl elérési útvonala
# "res://" a játék főkönyvtára, ebből nem léphetünk ki
get_tree().change_scene("res://Menu.tscn")
A script egyelőre így marad, majd későbbi fejezetekben folytatjuk.