Contenido del curso
Creando un enemigo
- 5

Fluxograma de estados do personagem no GameMaker
10:13 min - 6

Cómo preparar sprites de un enemigo en Game Maker
05:31 min - 7

Diseño de estados para un enemigo en GameMaker
Viendo ahora - 8

Persecución de enemigos con lengthdir
12:12 min - 9

Alarmas en GameMaker para controlar ataques
05:55 min - 10

Balas enemigas con dirección dinámica en GML
15:57 min - 11

Sensor de ataque en GameMaker paso a paso
10:15 min
Persistencia de objetos
Porting
Diseño de estados para un enemigo en GameMaker
Resumen
Diseñar el comportamiento de un enemigo en GameMaker se vuelve mucho más claro cuando lo planteas como una máquina de estados. Aquí vas a aprender a estructurar el flujo de un enemigo tipo Neon City Riders usando tres estados básicos: idle, chase y attack, ideal si estás dando tus primeros pasos en el desarrollo de videojuegos 2D.
¿Cómo se planea el comportamiento de un enemigo en un videojuego?
Antes de tocar código, conviene dibujar el flujo. Un diagrama simple en Paint basta para visualizar qué hará tu enemigo y en qué momento cambiará de comportamiento.
En este caso, el enemigo se inspira en Neon City Riders: un personaje que apunta con el dedo, dispara una bolita de energía y, si te toca, te hace daño. La lógica se divide en tres comportamientos claros que se conectan en ciclo.
¿Qué hace cada estado del enemigo?
- Idle: el enemigo está parado, respirando, sin perseguirte. Se representa con una I en el diagrama.
- Chase: si te acercas dentro de un radio determinado, comienza a perseguirte. Se marca con una C de chase.
- Attack: cuando llega a cierta distancia, dispara. Al terminar el ataque, regresa a idle y el ciclo vuelve a evaluarse.
Si te mantienes lejos, el enemigo se queda en idle indefinidamente. La transición depende de que cumplas el requisito de distancia.
¿Qué es una máquina de estados en videojuegos? Es un patrón donde un personaje solo puede estar en un comportamiento a la vez (idle, chase, attack) y cambia entre ellos según condiciones definidas, como la distancia al jugador.
¿Cómo se crea el objeto enemigo en GameMaker?
El primer paso es crear el objeto base. Se nombra obj_enemy_neo y por ahora se deja vacío. Nombrar con claridad es clave: si alguien más abre tu proyecto, debe entender de inmediato a qué se refiere cada archivo.
Luego se crea un grupo llamado enemy_neo_states para organizar los scripts asociados a cada comportamiento. Dentro de ese grupo se generan tres scripts vacíos por ahora:
script_enemy_neo_idle.script_enemy_neo_chase.script_enemy_neo_attack.
Esta estructura modular facilita mantener y escalar el código. Cada estado vive en su propio script y se invoca cuando corresponde.
¿Qué va dentro del script de idle?
El idle es el más sencillo de programar. Solo necesita una línea: asignar el sprite_index a la animación de idle del enemigo. Con eso, el personaje queda parado mostrando su animación de reposo.
¿Cómo se asigna el estado inicial al enemigo?
En el evento Create del objeto se declara una variable llamada state y se le asigna como valor por defecto enemy_neo_idle. Así, en cuanto el enemigo aparece en escena, ya sabe qué comportamiento ejecutar.
También se le asigna un sprite por defecto: el de idle. Aunque este paso es redundante (porque el script idle ya define el sprite_index), agregarlo evita ver un objeto sin sprite mientras GameMaker carga el primer frame.
¿Por qué definir el sprite dos veces no rompe el juego? Porque el script idle sobrescribe el sprite por defecto en cada step. El sprite inicial solo cubre el primer instante antes de que el estado tome el control.
¿Cómo dar profundidad al enemigo en el escenario?
En el evento Step se agrega la línea depth = -y. Esta técnica hace que los objetos con mayor valor de Y (más abajo en pantalla) se dibujen al frente, simulando profundidad en un juego 2D top down.
El resultado: puedes pasar por delante o por detrás del enemigo según tu posición vertical, lo que da sensación de espacio dentro del escenario.
¿Cómo se prueba el enemigo dentro de la sala?
Una vez configurado el objeto, se arrastra obj_enemy_neo a la capa de instancias dentro de room_1. Al ejecutar el juego, el enemigo aparece parado con su animación de respiración y respeta la profundidad: puedes rodearlo y ver cómo se ordena visualmente respecto a tu personaje.
Por ahora no persigue ni ataca, pero la base está lista. Los estados de chase y attack se construirán encima de esta estructura en las siguientes etapas, agregando detección de distancia y lógica de disparo.
Si te quedó alguna duda sobre cómo organizar tus scripts o cómo conectar los estados, déjala en los comentarios y seguimos resolviéndola juntos.