Los primeros pasos de nuestro enemigo
Clase 7 de 13 • Curso de Game Maker Studio 2: Interacción y Ataque de los Personajes
Contenido del curso
Creando un enemigo
Persistencia de objetos
Porting
Crear enemigos con comportamiento inteligente es uno de los retos más interesantes del desarrollo de videojuegos. Aquí se aborda cómo planificar y comenzar a implementar un enemigo con tres estados — idle, chase y attack — usando diagramas de flujo simples y la estructura de scripts en GameMaker.
¿Cómo planificar el comportamiento de un enemigo con un diagrama de flujo?
Antes de escribir una sola línea de código, es fundamental visualizar el comportamiento que se espera del enemigo. Usando una herramienta tan sencilla como Paint, se traza un diagrama de flujo que representa los tres estados del personaje enemigo [01:00]:
- Idle (I): el enemigo permanece quieto, sin realizar ninguna acción.
- Chase (C): si el jugador se acerca dentro de un radio de distancia determinado, el enemigo comienza a perseguirlo.
- Attack: cuando el enemigo alcanza otra distancia específica respecto al jugador, ejecuta un ataque disparando una bolita de energía.
El ciclo funciona así: del idle se pasa a chase cuando el jugador entra en el rango. Del chase se transita al attack cuando la distancia es suficientemente corta. Al finalizar el attack, el enemigo regresa a idle y vuelve a evaluar la distancia. Si el jugador está lejos, el enemigo simplemente se queda en idle hasta que se cumpla el requerimiento de proximidad [02:07].
Este tipo de planificación visual, aunque parezca básica, ayuda enormemente a tener claridad antes de programar. Los diagramas de flujo son una herramienta poderosa para simplificar lógicas que en la mente suenan complejas pero que, al dibujarlas, resultan mucho más manejables.
¿Cómo crear el objeto y los scripts del enemigo en GameMaker?
Con el diseño claro, el siguiente paso es crear la estructura dentro del proyecto [02:48]:
- Se crea el objeto obj_enemy_Neo, inicialmente vacío.
- Se organiza un grupo llamado enemy Neo states para mantener orden.
- Se generan tres scripts correspondientes a cada estado:
enemy_Neo_idle,enemy_Neo_attackyenemy_Neo_chase.
Una buena práctica destacada es nombrar todo de forma clara y descriptiva. Esto permite que cualquier persona que tome el proyecto entienda exactamente a qué se refiere cada recurso sin necesidad de explicaciones adicionales [03:23].
¿Qué contiene el script de idle?
El script más sencillo es el idle. Su única función por ahora es asignar el sprite index a la animación de idle del enemigo [03:44]. Esto garantiza que, cuando el enemigo esté en este estado, muestre la animación correcta de estar parado y respirando.
¿Cómo se asigna el estado inicial en el evento create?
En el evento create del objeto se define la variable state y se le asigna como valor por defecto enemy_Neo_idle [04:07]. De esta forma, al instanciar al enemigo, automáticamente entra en su estado de reposo.
También se asigna un sprite por defecto al objeto, aunque en la práctica no es estrictamente necesario: como el estado idle ya define el sprite_index, el resultado visual sería el mismo incluso sin ese sprite inicial [04:22].
¿Cómo dar profundidad al enemigo dentro del escenario?
Para que el enemigo se sienta más integrado en el mundo del juego, se añade en el evento step la línea de depth igual a menos y (depth = -y) [04:52]. Este concepto de profundidad, revisado en clases anteriores, permite que los objetos se ordenen visualmente según su posición vertical: el jugador puede pasar por detrás o por delante del enemigo de forma natural.
Finalmente, se arrastra el objeto a la capa de instancias del room y se ejecuta una prueba rápida [05:10]. El enemigo aparece en escena, respira con su animación de idle y responde correctamente al sistema de profundidad.
Este es apenas el punto de partida. Los estados de chase y attack se construirán progresivamente, añadiendo complejidad al comportamiento del enemigo. Si te interesa cómo se implementará la detección de distancia y el disparo, comparte tus ideas en los comentarios.