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.
Checking the stable version of the documentation...
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:
RigidBody2D ("2d pevné těleso") (pojmenované
Mob)AnimatedSprite2D ("2D animovaný sprite")
CollisionShape2D ("2D kolizní tvar")
VisibleOnScreenNotifier2D ("notifikátor viditelnosti v obrazovce")
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 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.
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.
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
using Godot;
public partial class Mob : RigidBody2D
{
// Don't forget to rebuild the project.
}
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()
public override void _Ready()
{
var animatedSprite2D = GetNode<AnimatedSprite2D>("AnimatedSprite2D");
string[] mobTypes = animatedSprite2D.SpriteFrames.GetAnimationNames();
animatedSprite2D.Play(mobTypes[GD.Randi() % mobTypes.Length]);
}
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()
// We also specified this function name in PascalCase in the editor's connection window.
private void OnVisibleOnScreenNotifier2DScreenExited()
{
QueueFree();
}
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.