Pályák létrehozása

A Godot Engine alapjai - II. Arkanoid
2021-06-20 · 22:29
Most, hogy a darabok már készen vannak, ideje elkészíteni az első tényleges pályát is.


Pálya készítése sablonból


Válasszuk a menüben a Scene -> New Inherited Scene... lehetőséget. A felugró ablakból válasszuk ki a PalyaSablon.tscn-t, majd nevezzük át az újonnan létrejövő scene root node-ját "Palya01"-re és mentsük is el ezen a néven.

Láthatjuk, hogy az alatta lévő node-ok ki lettek szürkítve. Nem kell megijedni, ez csak azt jelzi, hogy azok az alap scene-ből érkeztek, ha új node-ot adunk hozzá, az ezután is "rendesen" fog megjelenni.

Jelöljük ki a Teglak node-ot és adjunk hozzá egy Tegla-t - [Ctrl] + [Shift] + [A] - majd helyezzük el a játékterület egy nekünk tetsző pontján. A [Ctrl] + [D] gyorsbillentyűvel gyorsan készíthetünk másolatokat. Hozzunk létre pár téglát, például így:

az első pálya


Ha végeztünk a lerakással, a [Ctrl] vagy a [Shift] billentyűt nyomva tartva több téglát is kijelölhetünk, hogy egyszerre színezzük át őket, vagy változtassuk a pajzsaik értékét a jobb oldali panel tetején. Az eredményt nem fogjuk egyből látni, helyette át kell váltanunk a Tegla scene-re, ott nyomni egy mentést, majd visszaváltva a Palya01 scene-re, már láthatjuk a színes tégláinkat, remélhetőleg ez a jövőben egyszerűsödni fog.


A meglévő script-ek kiegészítése


Nyissuk meg a  Menu script-et és adjuk hozzá, a korábban létrehozott _on_Jatek_pressed() függvényhez, a következő sort:

get_tree().change_scene("res://Palya01.tscn")

Indítsuk el a játékot az [F5] billentyűvel. A főmenüben, a Játék gombra kattintva, most már be kell, hogy töltse az első pályát. A labdát a bal egérgombbal tudjuk kilőni, de egyelőre még nem fogja kiütni a téglákat, viszont máris találhatunk egy bugot. Ha megnyomjuk a bal egérgombot, miközben lefelé jön a labda, ismét ki fog lőni, felfelé.

Javítsuk ki gyorsan! Nyissuk meg a Labda script-et, és hozzunk létre egy új változót, kilove néven:

extends RigidBody2D
[...]
var kilove = false

Az _input(event)-et módosítsuk így:

func _input(event):
    if kilove == false:
        if event is InputEventMouseButton:
            if event.pressed and event.button_index == BUTTON_LEFT:
                linear_velocity = Vector2(0, -600)
                kilove = true

Végül adjuk még hozzá ezt a pár sort a script-hez:

# szorzó függvény létrehozása
# ezzel kaphatunk extra pontokat, ha anélkül ütünk ki több téglát,
# hogy az újra az ütőhöz érne
func aktualis_szorzo(szorzo):
    # a SzorzoSzam nevű címkére is kiírjuk ezt az értéket
    get_parent().SzorzoSzam.text = str(szorzo)


func _on_Labda_body_entered(body):
    # kiegészítjük a korábban létrehozott if utasítást
    if body.get_name() == "Uto":
        [...]
        # hívjuk a szorzo függvényt 0 értékkel,
        # azaz lenullázzuk a szorzót, ha hozzáér az ütőhöz
        aktualis_szorzo(0)
	
    # ha a body, a korábban létrehozott "tegla" group tagja
    if body.is_in_group("tegla"):
        # akkor az aktuális szorzóhoz hozzáadunk 1-et
        szorzo(get_parent().szorzo + 1)
        # ha a tégla pajzsa nagyobb, mint 1
        if body.pajzs > 1:
            # akkor kivonunk belőle 1-et
            body.pajzs -= 1
            # és frissítjük a kiírást is
            body.get_node("Pajzs").text = str(body.pajzs)
        # különben
        else:
            # töröljük a téglát
            body.queue_free()

[...]

# végül a labda törlődésekor
func _exit_tree():
    # szintén nullázzuk a szorzót
    aktualis_szorzo(0)
    # mielőtt létrehozzuk az új labdát
    get_parent().labda_letrehozasa()

Hozzunk létre a fentiek alapján, legalább még egy pályát. Semmi pánik, a kódot nem kell megírni újra, csak egy másolat kell a PalyaSablon-ról, amire lepakoljuk a téglákat. :)