Es el momento de crear a un enemigo para el juego. En el juego en el que estamos trabajando, nuestro enemigo es una serie de meteoritos de diferentes tamaños y formas, que nuestro jugador debe esquivar.
Vamos a ello!!!
El primer paso es crear la escena, en ella tendremos un node2D, un sprite2D y un CollisionShape2D
En el Sprite2D cargaremos nuestra imagen de meteorito, como hacemos siempre con las Sprites de juegos 2D. El CollisionShape en este caso le diremos que la forma (Shape) sera un RectangleShape2D, y lo rotaremos y haremos más grande para que coincida con el tamaño de nuestro sprite.
El siguiente paso es añadirle un grupo al node raíz de la escena, en nuestro caso le diremos que es del grupo meteor, esto será importante para luego:
Nuestra escena necesita un Script, que añadiremos como hacemos siempre al node raíz, y en el añadiremos el siguiente código:
Vamos a analizarlo. En nuestro juego los meteoritos caen desde la parte superior de la pantalla y tienen una dirección y una velocidad determinada.
Para ello hemos expuesto dos variables con el valor de la velocidad y la dirección que podemos modificar desde Godot.
En la funcion _ready seteamos la velocidad de nuestro meteorito. Para ello calculamos un valor aleatorio que este entre un rango definido por la velocidad que hemos indicado y a la que le sumamos un valor que depende del nivel actual del juego.
Para calcular la dirección hacemos algo parecido, buscamos un número aleatorio, para una serie de casos, caerá recto y para otros calcularemos una desviación.
Por último en la función _physics_process actualizamos la posición x e y del meteorito, y cuando se ha salido de la pantalla, lo eliminamos (queue_free)
Para darle más diversidad al juego, lo que hemos hecho es duplicar la escena recientemente creada, y modificar el tamaño y orientación del meteorito. Así a la hora de crear meteoritos en nuestro juego podemos diversificar un poco, y no todos los meteoritos serán iguales. Incluso si queremos podriamos utilizar diferentes sprites.
Ahora nos iremos al script de nuestra escena principal y al principio de todo, crearemos un array con las escenas de los meteoritos precargadas:
En el mismo script, hemos creado una función para crear los meteoritos en la pantalla del juego
Vamos a analizar el código. Recogemos la instancia de una de las escenas del array de meteoritos, calculando el indice de forma aleatoria. Luego lo posicionamos de forma aleatoria en la parte superior de la pantalla, y para calcular en que posición de la X (horizontal) calculamos un número aleatorio. Como veis, al ser todo aleatorio, eliminamos la posibilidad que todos los meteoritos salgan del mismo punto.
Esta función la llamaremos siempre que queramos, en nuestro caso, hemos creado un timer infinito, que a cada segundo llama a esta función:
Por último solo nos falta añadir el código cuando un meteorito colisiona con el jugador
En el script relacionado al jugador, añadiremos este trozo de código. En la función _on_area_entered miraremos si el objeto que ha entrado (parametro area) pertenece al grupo meteor. En ese caso emitiremos una señal indicando que el jugador ha muerto y eliminaremos el jugador del juego (queue_free).
Ahora solo tendriamos que recoger esta señal isDead en algún punto de nuestro script principal y tratarlo como tal. Por ejemplo mostrando un mensaje de fin de juego, y la posibilidad de empezar otra vez.