No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Seguimos creando el estado de ataque

5/14
Recursos

¿Cómo crear un flujo de estados en Game Maker Studio?

Al desarrollar videojuegos, es fundamental entender el flujo de estados del personaje para garantizar un comportamiento coherente. Utilizar diagramas de flujo simplifica esta tarea, permitiendo visualizar fácilmente cómo transitan entre un estado y otro. En esta clase, hemos utilizado una herramienta básica pero útil, Paint, para crear un diagrama de flujo para nuestro personaje en Game Maker Studio, dividendo el proceso en los estados de idle, mover y ataque.

¿Qué representa cada estado en el videojuego?

  • Idle: Es el estado inicial del personaje, sin movimiento ni acción.
  • Mover: Ocurre cuando el jugador presiona una tecla direccional (arriba, abajo, izquierda, derecha).
  • Ataque: Se activa al presionar el botón de ataque, siempre y cuando el personaje esté en estado idle.

¿Qué reglas seguir para los cambios de estado?

  1. Iniciar el juego en el estado idle.
  2. Pasar al estado mover al presionar cualquier tecla de dirección y regresar a idle al soltarla.
  3. Ir del estado idle a ataque al pulsar el botón de ataque.
  4. Regresar automáticamente a idle desde ataque al finalizar la animación de ataque.

¿Cómo implementar un flujo de estados en código?

Abrimos el objeto obj_player en nuestro proyecto de Game Maker Studio y comenzamos a realizar los cambios necesarios:

Creación de estados y condiciones

Usamos if para representar los cambios de estado, enlazándolos con el diagrama planificado. Comenzamos comentando el código dentro de step_event, manteniéndolo para futuras referencias, y luego adaptamos a los nuevos requerimientos:

// Estado Idle hacia Move
if (state == script_idle && (keyboard_check(vk_left) || keyboard_check(vk_right) || keyboard_check(vk_up) || keyboard_check(vk_down))) {
    state = script_move;
}

// Regresar de Move a Idle
else if (state == script_move && !(keyboard_check(vk_left) || keyboard_check(vk_right) || keyboard_check(vk_up) || keyboard_check(vk_down))) {
    state = script_idle;
}

// Estado Idle hacia Ataque
else if (state == script_idle && keyboard_check(vk_attack)) {
    state = script_attack;
}

Evento de finalización de animación

Para regresar automáticamente al estado idle desde ataque, utilizamos el evento animation_end.

if (state == script_attack) {
    state = script_idle;
}

Ajuste del image_index

Para asegurar que la animación de ataque se inicia siempre desde el principio, restablecemos el image_index al cambiar al estado de ataque.

if (state == script_attack) {
    image_index = 0;
}

¿Cómo podemos verificar el correcto funcionamiento?

Probamos el juego pulsando F5. Observamos que:

  • El personaje pasa de idle a mover al usar las teclas direccionales.
  • El estado regresa a idle al soltarlas.
  • La acción de ataque se activa y regresa automáticamente a idle tras completar la animación.

A través de estos pasos prácticos, hemos consolidado nuestro entendimiento sobre los estados en Game Maker Studio. Si tienes dudas, no dudes en expresar tus inquietudes.

¡Sigue adelante! En la siguiente clase, aplicaremos estos conocimientos para crear nuestro primer enemigo, permitiendo una interacción más dinámica. Invierte tiempo en explorar y experimentar; el diseño de videojuegos es una habilidad enriquecedora que te ofrece posibilidades infinitas.

Aportes 6

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Tuve un error por una variable “right” que no estaba definida
Me di cuenta que en el Evento Create la línea

state = scr_state_idle();

en realidad debe estar sin los paréntesis

state = scr_state_idle; 

Si tienen curiosidad por saber el número de frame por el que va la animación, solo deben agregar esta línea al Evento Draw GUI de Player

draw_text(10,25,string(image_index));

Con eso se vería algo así

no se si estoy creando un cuaderno o un libro que tiene la info de video juegos, paginas, java, etc… falta el catalogo de búsqueda en el libro cuaderno 😃

Yo lo hice en la clase anterior lo de resetear el indice de imagen de la animacion, me di cuenta probando el juego que arrancaba en donde terminaba la animacion anterior y lo quise arreglar jaja. Por eso me quedo distinto, puse el reinicio del image index en el script del ataque directamente:

function scr_state_mc_attacking(){
if(sprite_index != spr_batman_attacking){
image_index = 0;
sprite_index = spr_batman_attacking;
}
else {sprite_index = spr_batman_attacking;}
}

Para abrir las ventanas en la forma de flujo que muestra el profesor, solo debes seleccionar la función y presionar “F1”