Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: [Solucionado] Ignorar subimagenes la segunda vez que se ejecuta un sprite  (Leído 658 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado FernandoNavarro

Hola gente. Espero que se encuentren bien.

Quiero consultar una forma de poner un sprite en bucle, pero que use cierto número de subimagenes la primera vez que se inicia.

Mi referencia son las animaciones de cargar ataques de ki en Dragon Ball Z: Buu's Fury.

No quiero usar muchos sprites para optimizar memoria.

Gracias por leer.
« última modificación: Noviembre 21, 2020, 07:53:16 pm por FernandoNavarro »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado getnoff

Respuesta #1 en: Octubre 26, 2020, 05:50:38 pm
Creo que es lo mismo de esta pregunta
https://www.comunidadgm.org/preguntas-y-respuestas/problemas-de-animacion/msg137740/#msg137740

Game maker usa el sistema de darle velocidad de animación a un sprite usando image_speed y no se puede excluir alguna subimagen dentro.

Así que la única forma es implementar un sistema propio para hacer nuestra animación.

Una forma fácil es crear sprites separados, primero se crea el que contiene sólo los fotogramas que se verán una vez.
Y luego crear otro sprite que contenga los fotogramas que se repetirán.

Por ejemplo haces el movimiento, le dices que pase al primer sprite, y después detectar cuando acaba esa animación (con un evento animation end por ejemplo), y dices que cambie al sprite que será del bucle.

 


Desconectado T789

Respuesta #2 en: Octubre 26, 2020, 06:43:23 pm
Saludos FernandoNavarro

Puedes usar un mismo sprite y gestionar manualmente cada subimagen dependiendo de cad estado. Por ejemplo yo suelo crear un solo sprite que contenga todas las animaciones que necesito (claro puede llegar a ser un poco largo), y de paso escribo en algun comentario el orden de cada subimagen:
Código: [Seleccionar]
/* Orden de subimagenes
 0-3 //caminar
 4-6 //corriendo
 7-8 //saltando
 9-11 //buceando
*/
En tu caso si lo que quieres es hacer un ataque pues solo verifica con unos if, y de misma forma con una variable que gestione el estado de ataque
/// Event Create
atack_state = ""; //funciona para establecer el estado de ataque

/// Event Step
if (atack_state == "cargando") {
  if (image_index > 3) //En caso de que la subimagen este mas alla de las de cargando, claro... Puse 3 como ejemplo
     image_index = 0;
}
else if (atack_state == "ejecutando") {
  if (image_index < 4 or image_index > 7) //En caso de que la animacion anterior se haya restablecido pero estemos ejecutando ataque, entonces ponerla automaticamente en la primera subimagen de la ejecucion
     image_index = 4;
}
Ese codigo de ahi se encargara gestionar las subimagenes dependiendo del estado de ataque; ahora habria que verificar donde poner para cambiar los estados de ataque. Voy a usar 2 eventos de tecleo como ejemplo
/// Event Keyboard Space
if (atack_state != "ejecutando") {
  //Podrias poner aqui un aumento para una variable de daño
  atack_state = "cargando";
}

/// Event Keyboard Released Space
atack_state = "ejecutando";
Bueno eso fue un pequeño ejemplo, te sugiero que veas si no estas verificando una animacion en otra parte, para no tener problemas

 
Los siguientes usuarios dieron las gracias a este tema: FernandoNavarro


Desconectado FernandoNavarro

Respuesta #3 en: Octubre 26, 2020, 09:05:06 pm
Saludos FernandoNavarro

Puedes usar un mismo sprite y gestionar manualmente cada subimagen dependiendo de cad estado. Por ejemplo yo suelo crear un solo sprite que contenga todas las animaciones que necesito (claro puede llegar a ser un poco largo), y de paso escribo en algun comentario el orden de cada subimagen:
Código: [Seleccionar]
/* Orden de subimagenes
 0-3 //caminar
 4-6 //corriendo
 7-8 //saltando
 9-11 //buceando
*/
En tu caso si lo que quieres es hacer un ataque pues solo verifica con unos if, y de misma forma con una variable que gestione el estado de ataque
/// Event Create
atack_state = ""; //funciona para establecer el estado de ataque

/// Event Step
if (atack_state == "cargando") {
  if (image_index > 3) //En caso de que la subimagen este mas alla de las de cargando, claro... Puse 3 como ejemplo
     image_index = 0;
}
else if (atack_state == "ejecutando") {
  if (image_index < 4 or image_index > 7) //En caso de que la animacion anterior se haya restablecido pero estemos ejecutando ataque, entonces ponerla automaticamente en la primera subimagen de la ejecucion
     image_index = 4;
}
Ese codigo de ahi se encargara gestionar las subimagenes dependiendo del estado de ataque; ahora habria que verificar donde poner para cambiar los estados de ataque. Voy a usar 2 eventos de tecleo como ejemplo
/// Event Keyboard Space
if (atack_state != "ejecutando") {
  //Podrias poner aqui un aumento para una variable de daño
  atack_state = "cargando";
}

/// Event Keyboard Released Space
atack_state = "ejecutando";
Bueno eso fue un pequeño ejemplo, te sugiero que veas si no estas verificando una animacion en otra parte, para no tener problemas

Gracias, tenía la misma base pero con algunos errores, complementé ambos y funciona de maravilla.

Un abrazo virtual <3