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...
Crear el enemigo
Es momento de hacer los enemigos que nuestro jugador tendrá que evitar. Su comportamiento no será muy complejo: los enemigos aparecerán al azar en los bordes de la pantalla y se moverán en una dirección al azar en línea recta.
Crearemos una escena Mob, la que podremos instanciar para crear cualquier número independiente de enemigos en el juego.
Configuración del Nodo
Haz clic en Escena -> Nueva escena del menú superior y agrega los siguientes nodos:
RigidBody2D (llamado
Mob)
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).
Selecciona el nodo Mob y establece su propiedad Gravity Scale en la sección RigidBody2D del inspector en 0. Esto evitará que el mob caiga hacia abajo.
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.
Configura el AnimatedSprite2D como hiciste con el jugador. Esta vez, tenemos 3 animaciones: fly, swim, y walk. Hay dos imágenes para cada animación en la carpeta art.
La propiedad Animation Speed tiene que ser ajustada para cada animación individual. Ajústala a 3 para las 3 animaciones.
Puedes utilizar los botones "Play Animation" situados a la derecha del campo de entrada Animation Speed para previsualizar tus animaciones.
Nosotros seleccionamos una de estas animaciones al azar así los mobs tendrán algo de variedad.
Al igual que las imágenes de los jugadores, estas imágenes de los enemigos necesitan ser reducidas. Establece la propiedad Scale de AnimatedSprite2D en (0.75, 0.75).
Igual que en la escena Player, añade un CapsuleShape2D para las colisiones. Para alinear la forma de colisión con la imagen deberás ajustar la propiedad Rotation a 90 (en la sección "Transform" del Inspector).
Guarda la escena.
Script del enemigo
Añade un script al Mob de esta manera:
extends RigidBody2D
using Godot;
public partial class Mob : RigidBody2D
{
// Don't forget to rebuild the project.
}
Ahora veamos el resto del script. En _ready() reproducimos la animación y elegimos aleatoriamente uno de los tres tipos de animación:
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]);
}
En primer lugar, obtenemos la lista de nombres de animación de la propiedad sprite_frames del AnimatedSprite2D. Esto devuelve un arreglo que contiene los tres nombres de animación: ["walk", "swim", "fly"].
En el código de GDScript, usamos el método Array.pick_random para seleccionar aleatoriamente uno de estos nombres de animación. Mientras tanto, en el código de C#, elegimos un número aleatorio entre 0 y 2 para seleccionar uno de estos nombres de la lista (los índices de matriz empiezan en 0). La expresión GD.Randi() % n selecciona un entero aleatorio entre 0 y n-1.
Finalmente, ejecutamos play() para empezar a reproducir la animación seleccionada.
La última parte es hacer que los enemigos se borren a sí mismos cuando abandonan la pantalla. Conecta la señal screen_exited() del nodo VisibleOnScreenNotifier2D al Mob y agrega este código:
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() es una función que esencialmente 'libera' o elimina el nodo al final del marco.
Esto completa la escena Mob.
Con el jugador y los enemigos listos, en la siguiente parte los reuniremos en una nueva escena. Haremos que los enemigos aparezcan al azar alrededor del tablero de juego y avanzaremos, convirtiendo nuestro proyecto en un juego jugable.