Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Tvorba nepřítele

Je načace vytvořit nepřátele, kterým se náš hráč bude muset vyhnout. Jejich chování nebude složité: náhodně se vynoří na okrajích obrazovky a vyberou náhodný směr, ve kterém se budou pohybovat po přímce.

Vytvoříme scénu Mob, pomocí jejíž instancí pak ve hře vytvoříme libovolný počet nezávislých nepřátel.

Příprava uzlu

Klikněte na Scéna -> Nová scéna v horní nabídce a přidejte následující uzly:

Don't forget to set the children so they can't be selected, like you did with the Player scene. This is done by selecting the parent node (RigidBody2D) in the Scene tree dock, then using the Group button at the top of the 2D editor (Ctrl + G or Cmd + G on macOS).

Vyberte uzel Mob a nastavte jeho vlastnost Měřítko gravitace v sekci inspektoru RigidBody2D na 0. Tím zabráníte tomu pádu nepřátel dolů.

In addition, in the Mob node inspector, under the CollisionObject2D section, expand the Collision group and uncheck the 1 inside the Mask property. This will ensure the mobs do not collide with each other.

../../_images/set_collision_mask.webp

Nastavme AnimatedSprite2D podobně jako u hráče. Tentokrát máme 3 animace: fly ("létat"), swim ("plavat") a walk ("chodit"). Pro každou animaci jsou v art složce dva obrázky.

Vlastnost Rychlost animace musí být nastavena pro každou jednotlivou animaci. Upravte ji pro všechny 3 animace na 3.

../../_images/mob_animations.webp

Pro náhled animací můžete použít tlačítka "Přehrát animaci" napravo od vstupního pole Rychlost animace.

Jednu z těchto animací vybereme náhodně, aby nepřátelé byli trochu různorodí.

Stejně jako u obrázků hráče potřebujeme zmenšit i tyto obrázky. Nastavte vlastnost Měřítko uzlu AnimatedSprite2D na (0.75, 0.75).

Stejně jako tak jako ve scéně Player přidejte pro kolize CapsuleShape2D. Chcete-li zarovnat tvar s obrázkem, musíte nejprve tvaru nastavit Stupně otočení na 90 (v Inspektoru pod "Transformace").

Uložte scénu.

Skript nepřítele

Přidejte skript ke scéně Mob, který začne:

extends RigidBody2D

Nyní se podívejme na zbytek skriptu. V _ready() ("připraveno") spustíme přehrávání animace, poté co náhodně vybereme jeden z našich tří typů:

func _ready():
    var mob_types = Array($AnimatedSprite2D.sprite_frames.get_animation_names())
    $AnimatedSprite2D.animation = mob_types.pick_random()
    $AnimatedSprite2D.play()

Nejprve získáme seznam názvů animací z vlastnosti sprite_frames ("snímky spritu") AnimatedSprite2D. To vrátí pole obsahující všechny tři názvy animací: ["walk", "swim", "fly"].

V GDScriptovém kódu použijeme pro náhodný výběr jednoho z těchto názvů metodu Array.pick_random ("vybrat náhodné"). V C# kódu pro výběr ze seznamu použijeme náhodné číslo mezi 0 a 2 (indexy polí začínají nulou). Výraz GD.Randi() % n vybere náhodné celé číslo mezi 0 a n-1.

Finally, we call play() to start playing the chosen animation.

Nakonec ještě chceme moby smazat, když opustí obrazovku. Připojte signál screen_exited() ("obrazovka opuštěna") uzlu VisibleOnScreenNotifier2D k uzlu Mob a přidejte tento kód:

func _on_visible_on_screen_notifier_2d_screen_exited():
    queue_free()

queue_free() ("zavést do fronty pro uvolnění") je funkce, která v podstatě 'uvolní', tedy odstraní uzel na konci snímku.

Tím je dokončena scéna Mob.

Teď už máme připraveného hráče i nepřátele. V příštím díle je propojíme v nové scéně. Nepřátele budeme náhodně vytvářet a posílat po herním plánu, čímž náš projekt proměníme v hratelnou hru.