Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Kain88 en Marzo 13, 2015, 12:23:21 AM

Título: Anular sincronización entre sprites [SOLUCIONADO]
Publicado por: Kain88 en Marzo 13, 2015, 12:23:21 AM
Hola, tengo una duda: En mi juego el personaje tiene varias animaciones en cada sprite, pongo un ejemplo:

Cuando el personaje esta quieto, el sprite tiene 8 subimagenes, y cuando salta tiene 5, el problema esta en que el game maker sincroniza los sprites, y cuando mi personaje esta quieto y va por la subimagen 5 (o cualquiera de las ultimas subimagenes) al presionar el boton de salto, la animacion que hace al saltar no comienza del principio, sino que lo hace a partir de las ultimas subimagenes, como si continuara con la animacion del sprite cuando el personaje esta quieto.

Mi pregunta es:  hay alguna manera de hacer que cada sprite sea independiente en las animaciones?
Título: Re:Anular sincronización entre sprites
Publicado por: penumbra en Marzo 13, 2015, 12:52:45 AM
Suponiendo que el botón de salto sea la tecla 'S'. Para comenzar la animación desde la primer subimagen:

EVENTO KEYPRESS S[gml]
image_index = 0[/gml]

STEP
[gml]
if keyboard_check_pressed(ord('S'))
     image_index = 0
[/gml]

Cualquiera de los dos métodos anteriores reiniciaría la subimagen a 0. Faltaría, por supuesto cambiar el sprite_index al sprite de salto, y agregar código para evitar que cada que se presione S, la animación se reinicie (por ejemplo, si se presiona 'S' en el aire)
Título: Re:Anular sincronización entre sprites
Publicado por: Kain88 en Marzo 13, 2015, 03:16:03 AM
Si, ya habia probado esa forma, pero lo que hace image_index es trabar el sprite especificamente en esa imagen, por ejemplo si pongo "image_index=0" eel sprite queda en la imagen 0 y la animacion no corre  :(
Título: Re:Anular sincronización entre sprites
Publicado por: penumbra en Marzo 13, 2015, 03:53:27 AM
¿Probaste ambos códigos? image_index no traba la animación (de hecho, no conozco otra manera de hacer lo que quieres sin usar image_index). Lo que traba la animación es usar image_index en un evento indebido o de una manera no adecuada. Si la animación se traba, es porque image_index = 0 se está ejecutando TODOS los steps, y para que funcione, sólo debe ejecutarse en un ÚNICO STEP.

Los códigos de arriba precisamente se ejecutan sólo una vez (por pulsación).

1. el evento KEY PRESS sólamente se ejecuta una vez, cuando la tecla S cambia de no estar presionada a estar presionada. Aunque la tecla se mantenga oprimida más STEPS, esos siguientes steps ya no se ejecuta el evento, por lo que, si la animación tiene image_speed mayor a 0, la animación avanzará a las siguentes subimagenes sin trabarse.

2. La función keyboard_check_pressed(ord('S')) trabaja de manera similar. Sólo es verdadera cuando la tecla S, que no estaba presionada, se presiona, forzando a que image_index sea 0, pero los siguientes STEPS, la condicion deja de ser cierta (aunque la tecla siga oprimida), por lo que image_index cambiará según la velocidad de animación image_speed.

Aquí dejo un ejemplo donde se puede ver que las dos animaciones comienzan siempre en la subimagen 0, y no se traban.
http://www.mediafire.com/download/z21drwc2s2zo162/animation.gmz (http://www.mediafire.com/download/z21drwc2s2zo162/animation.gmz)

EDITADO: ME había faltado agregar un par de líneas en STEP, resubido y funcionando.
Título: Re:Anular sincronización entre sprites
Publicado por: Kain88 en Marzo 13, 2015, 05:27:59 AM
Ah claro, yo lo habia colocado para que se ejecute en varios steps. Voy a probar" image index" en "keyboard check pressed" en el evento step, ya que es el codigo que estoy usando.

Muchas gracias por tu ayuda, hoy lo pruebo y te cuento como me fue.
Título: Re:Anular sincronización entre sprites [SOLUCIONADO]
Publicado por: Kain88 en Marzo 13, 2015, 07:56:14 PM
Tenias razón, penumbra, era eso, gracias!  :D