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.

Die Gegner erschaffen

Jetzt ist es an der Zeit die Gegner zu erstellen, denen der Spieler ausweichen muss. Ihr Verhalten wird nicht allzu komplex sein: Mobs werden zufällig an den Rändern des Bildschirms spawnen, eine zufällige Richtung auswählen und sich in einer geraden Linie fortbewegen.

Wir werden dies in eine Mob-Szene einbauen, die wir dann instanziieren, um beliebig viele unabhängige Mobs im Spiel erstellen zu können.

Node einrichten

Klicken Sie im oberen Menü auf Szene -> Neue Szene und fügen Sie die folgenden Nodes hinzu:

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).

Wählen Sie den Mob-Node und setzen Sie seine Property Schwerkraft-Skalierung im Abschnitt RigidBody2D des Inspektors auf 0. Dies wird verhindern, dass der Mob nach unten fällt.

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

Richten Sie den AnimatedSprite2D ein, wie Sie es für den Player getan haben. Dieses Mal haben wir 3 Animationen: fly, swim, und walk. Es gibt zwei Bilder für jede Animation im "art"-Ordner.

Die Eigenschaft Animationsgeschwindigkeit muß für jede einzelne Animation eingestellt werden. Stellen Sie sie auf 3 für alle 3 Animationen ein.

../../_images/mob_animations.webp

Sie können den "Animation abspielen"-Button rechts neben dem Eingabefeld Animationsgeschwindigkeit verwenden, um eine Vorschau Ihrer Animationen zu erhalten.

Wir werden eine der Animationen zufällig auswählen, sodass die Mobs eine gewisse Vielfalt haben.

Wie die Spielerbilder müssen auch die Mob-Bilder herunterskaliert werden. Setzen Sie die Eigenschaft Skalierung des AnimatedSprite2D auf (0.75, 0.75).

Wie in der Player-Szene, fügen Sie eine CapsuleShape2D für die Kollision hinzu. Um die Form mit dem Bild auszurichten, müssen Sie die Eigenschaft Rotation auf 90 setzen (unter "Transform" im Inspektor).

Speichern Sie die Szene.

Gegner-Skript

Fügen Sie ein Skript zur Mob wie folgt hinzu:

extends RigidBody2D

Lassen Sie uns nun den Rest des Skripts betrachten. In _ready() wählen wir zufällig einen der drei Animationstypen:

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

Zuerst holen wir uns die Liste der Animationsnamen aus der Property sprite_frames von AnimatedSprite2D. Das Ergebnis ist ein Array mit allen drei Animationsnamen: ["walk", "swim", "fly"].

In the GDScript code, we use the Array.pick_random method to select one of these animation names at random. Meanwhile, in the C# code, we pick a random number between 0 and 2 to select one of these names from the list (array indices start at 0). The expression GD.Randi() % n selects a random integer between 0 and n-1.

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

Der letzte Teil besteht darin, dass sich die Mobs selbst löschen, wenn sie den Bildschirm verlassen. Verbinden Sie das screen_exited()-Signal des VisibleOnScreenNotifier2D-Nodes mit dem Mob und fügen Sie diesen Code hinzu:

func _on_visible_on_screen_notifier_2d_screen_exited():
    queue_free()

queue_free() is a function that essentially 'frees', or deletes, the node at the end of the frame.

Damit ist die Mob-Szene fertig.

Da nun die Spieler und die Gegner fertig sind, werden wir sie im nächsten Teil in einer neuen Szene zusammenführen. Wir werden die Gegner zufällig rund um das Spielfeld spawnen lassen und sie vorwärts bewegen, was unser Projekt zu einem spielbaren Spiel macht.