Muchos juegos incluyen algún tipo de enemigo con el que luchar. Explore las diversas formas en que puede agregar, y perfeccionar, el combate enemigo.
Los enemigos juegan un papel crucial en hacer que los juegos sean emocionantes y desafiantes para los jugadores. Ya sea que esté creando un juego de plataformas en 2D, un juego de disparos desde arriba hacia abajo o un juego de rol, agregar enemigos puede mejorar significativamente la experiencia de juego.
La interfaz fácil de usar de Godot y el lenguaje de secuencias de comandos intuitivo, GDScript, hacen que el proceso sea eficiente y agradable.
Configuración del juego de Godot
Antes de sumergirte en la creación de enemigos, configura la estructura básica de tu juego 2D en el motor de juego de Godot.
Crea un nuevo proyecto 2D en Godot. En la escena principal, crea un nuevo CinemáticaCuerpo2D nodo y nombrarlo Jugador. Dentro del nodo del jugador, agregue un ColisiónForma2D con forma de rectángulo, que será el hitbox del jugador. También agregue un Duende nodo como una representación visual del personaje del jugador.
El código utilizado en este artículo está disponible en este repositorio GitHub y es gratis para su uso bajo la licencia MIT.
Adjunte el siguiente código GDScript al Jugador nodo para habilitar el movimiento básico:
extends KinematicBody2D
const SPEED = 200
func _physics_process(delta):
var motion = Vector2.ZEROif Input.is_action_pressed("ui_right"):
motion.x += SPEEDif Input.is_action_pressed("ui_left"):
motion.x -= SPEEDif Input.is_action_pressed("ui_down"):
motion.y += SPEEDif Input.is_action_pressed("ui_up"):
motion.y -= SPEED
motion = move_and_slide(motion)
Con este código, el jugador puede moverse hacia la izquierda, derecha, arriba y abajo usando las teclas de flecha o las teclas WASD.
Crear un enemigo simple
Ahora que tienes configurado un personaje de jugador, puedes crear un enemigo simple.
Cree una nueva escena y agregue un Cuerpo estático2D nodo llamado Enemigo. Dentro del nodo Enemigo, agrega un ColisiónForma2D nodo con forma de círculo para definir el hitbox del enemigo. También agregue un Duende nodo para representar visualmente al enemigo.
Con la colisión configurada, el enemigo estará listo para interactuar con el jugador y otros elementos en tu mundo de juego.
Hacer que un enemigo siga al jugador
Crear enemigos que sigan al jugador añade un nuevo nivel de desafío al juego.
Crea una nueva escena para el siguiente tipo de enemigo y agrega un CinemáticaCuerpo2D nodo llamado Seguir al enemigo con una CollisionShape2D. Adjunte el siguiente código GDScript al nodo FollowEnemy para que siga al jugador:
extends KinematicBody2D
const SPEED = 100
func _physics_process(delta):
var player = get_parent().get_node("Player")
var player_position = player.global_position
var enemy_position = global_position
var direction = player_position - enemy_position
direction = direction.normalized()
var motion = direction * SPEED * delta
move_and_collide(motion)
Ahora el Seguir al enemigo se moverá hacia la posición del jugador en cada fotograma.
Adición de balas enemigas
Ahora, puedes hacer que el enemigo dispare balas hacia el jugador. Crea una nueva escena y nómbrala Bala.tscn. Agrega un CinemáticaCuerpo2D nodo a la escena. Adjunta Bala.gd script al nodo KinematicBody2D en la escena Bullet.tscn. Agregue el siguiente código para definir la clase Bullet:
extends KinematicBody2D
const BULLET_SPEED = 300
var bullet_direction = Vector2.ZEROfunc _physics_process(delta):
var motion = bullet_direction * BULLET_SPEED * delta
move_and_collide(motion)
func set_direction(direction):
bullet_direction = direction.normalized()
Ahora, crea un nuevo nodo para el enemigo con balas y asígnale un nombre DisparosEnemigo. Dentro del nodo ShootingEnemy, agrega un ColisiónForma2D nodo con forma de rectángulo como hitbox.
Adjunte el siguiente código GDScript al nodo ShootingEnemy para que dispare balas:
extends KinematicBody2D
const SPEED = 100
const SHOOT_DELAY = 1.5
var shoot_timer = SHOOT_DELAY# Import the Bullet scene
const BulletScene = preload("res://Bullet.tscn")func _physics_process(delta):
# Shooting logic
shoot_timer -= delta
if shoot_timer <= 0:
shoot_timer = SHOOT_DELAY
var bullet_instance = BulletScene.instance()
bullet_instance.global_position = global_position
bullet_instance.set_direction(direction)
get_parent().add_child(bullet_instance)
El enemigo ahora disparará balas periódicamente hacia la posición del jugador. Usa un condicional si declaración para comprobar si el disparar_temporizador es menor que 0. Si es así, dispara la bala.
Enemigo que se mueve al azar
Además de los enemigos que siguen o disparan al jugador, un enemigo que se mueve al azar puede inyectar un elemento de imprevisibilidad y desafío en tu juego. Crear un enemigo con patrones de movimiento aleatorios requiere una combinación de lógica simple y generación de números aleatorios.
Comience creando una nueva escena y agregue una CinemáticaCuerpo2D nodo llamado Enemigo aleatorio. Crear un nuevo script llamado RandomEnemy.gd y adjuntarlo al nodo RandomEnemy. El script manejará la lógica de movimiento aleatorio.
extends KinematicBody2D
const MOVE_SPEED = 100
const MOVE_INTERVAL_MIN = 1.0
const MOVE_INTERVAL_MAX = 3.0var move_timer = 0.0
var move_interval = 0.0
var move_direction = Vector2.ZEROfunc _ready():
choose_new_direction()func choose_new_direction():
move_interval = rand_range(MOVE_INTERVAL_MIN, MOVE_INTERVAL_MAX)
move_timer = move_interval
move_direction = Vector2(randf(), randf()).normalized()func _physics_process(delta):
move_timer -= deltaif move_timer <= 0.0:
choose_new_direction()
var motion = move_direction * MOVE_SPEED * delta
move_and_collide(motion)
Incluyendo funciones adicionales
Hay muchas características adicionales que puedes agregar a tus enemigos para hacer que el juego sea más interesante.
Batallas de jefes
Las batallas contra jefes sirven como momentos culminantes en tu juego, brindando encuentros memorables y desafiantes que ponen a prueba las habilidades y la perseverancia de los jugadores. Los jefes enemigos suelen ser más grandes y poderosos que los enemigos normales, lo que requiere que los jugadores empleen estrategias y tácticas específicas para derrotarlos.
Desove dinámico de enemigos
Implemente un sistema de generación dinámica que ajuste los encuentros con los enemigos en función del rendimiento, la ubicación o los eventos del juego del jugador. Esto crea una experiencia de juego más receptiva y personalizada.
Adaptación Ambiental
Crea enemigos que puedan adaptarse al entorno, como enemigos que puedan volar, nadar o escalar paredes. Esta versatilidad abre nuevas posibilidades de juego y desafía a los jugadores a navegar por diferentes terrenos.
Debilidades y resistencias del enemigo
Asigne debilidades y resistencias específicas a los enemigos, alentando a los jugadores a experimentar con diferentes enfoques y tácticas. Algunos enemigos pueden ser vulnerables a ciertos ataques o elementos, mientras que otros son inmunes o resistentes.
Personalización del enemigo y variaciones de comportamiento
Agregue un nivel de imprevisibilidad dando a los enemigos variaciones de comportamiento aleatorias. Por ejemplo, un enemigo puede tener diferentes patrones de ataque o velocidades de movimiento en diferentes partidas, manteniendo el juego fresco y rejugable.
Incluir una variedad de estas características adicionales puede enriquecer el diseño del enemigo de tu juego, haciendo que cada encuentro sea único y memorable para los jugadores.
Recuerda que si bien la introducción de nuevas mecánicas puede ser emocionante, es crucial mantener el equilibrio y la coherencia dentro del diseño general de tu juego.
Mejores prácticas para crear enemigos
Al crear enemigos en tu juego de Godot, considera las siguientes prácticas recomendadas:
Comunicación visual clara
Usa diseños de enemigos distintivos que se destaquen del entorno para que los enemigos sean fácilmente reconocibles.
Considere usar códigos de colores o siluetas únicas para diferenciar los tipos de enemigos. Asegúrate de que las animaciones y los efectos visuales del enemigo refuercen sus comportamientos y ataques.
Dificultad de equilibrio
Introduce gradualmente enemigos con una complejidad creciente a medida que el jugador avanza en el juego. Pruebe los encuentros con enemigos con jugadores de diferentes niveles de habilidad para asegurarse de que los desafíos sean adecuados para todos los jugadores. Evite picos repentinos de dificultad que puedan frustrar a los jugadores.
Evitar golpes bajos
Diseña enemigos con ataques que el jugador pueda esquivar o bloquear, dándoles la oportunidad de reaccionar. Use un hitbox justo para los ataques de los enemigos, evitando los ataques que golpean más allá de su representación visual. Use señales o señales de advertencia para insinuar ataques peligrosos.
Prueba de juego e iteración
Pruebe regularmente los encuentros con enemigos durante el desarrollo para evaluar su factor de diversión y dificultad. Recopile comentarios de los jugadores y utilícelos para ajustar los comportamientos, fortalezas y debilidades de los enemigos.
Efectos de sonido
Los efectos de sonido juegan un papel crucial en la creación de un entorno de juego envolvente y cautivador. Cuando un enemigo recibe un golpe, agregue apropiado efectos de sonido sin copyright para reforzar la sensación de impacto y participación en el combate.
Su juego puede acompañar cada ataque o golpe con distintas señales de audio que corresponden al tipo de ataque y las características del enemigo.
Haciendo que los juegos de Godot sean más atractivos para los enemigos
Los enemigos son un componente fundamental de muchos juegos, ya que brindan desafíos, obstáculos y una sensación de logro cuando son derrotados. Al agregar diferentes tipos de enemigos con diferentes comportamientos, puntos de salud y mecánicas de disparo, puedes crear experiencias de juego diversas y atractivas para los jugadores.
Recuerda equilibrar la dificultad, ofrecer comentarios visuales y auditivos, y probar a tus enemigos a fondo para brindarles a los jugadores una experiencia de juego agradable y gratificante.