Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: JasperStealth en Junio 03, 2017, 01:53:26 AM

Título: Como iniciar los sprites siempre en la misma subimagen (SOLUCIONADO :D)
Publicado por: JasperStealth en Junio 03, 2017, 01:53:26 AM
Hola amigos, quisiera saber como iniciar las animaciones de los sprites en una subimagen determinada. Lo que pasa es que a veces las animaciones inician en subimagenes que quedan a mitad de la animacion o a veces van mas rapido de lo normal. Entonces quisiera saber como determino estos dos valores para que siempre sean los mismos.
(Trabajo en game maker studio 2)

Gracias
Título: Re:Como iniciar los sprites siempre en la misma subimagen
Publicado por: Clamud en Junio 03, 2017, 04:41:32 PM
Al asignar sprite_index, también asigna image_index.
Título: Re:Como iniciar los sprites siempre en la misma subimagen
Publicado por: JasperStealth en Junio 03, 2017, 11:17:15 PM
Clamud, pero al asignar el image_index la animacion se queda estatica en ese frame y lo que quiero es que la animacion siempre parta del frame 0 (por decir) no que se quede estatica en ese frame
Título: Re:Como iniciar los sprites siempre en la misma subimagen
Publicado por: bygdle en Junio 04, 2017, 12:27:49 AM
Intenta hacer esto:

En el evento Create, declara una variable que almacenará el sprite anterior:
[gml]
///Evento Create
sprite_index_prev = sprite_index;
[/gml]
Luego, en End Step, actualiza la variable.
[gml]
///Evento End Step
sprite_index_prev = sprite_index;
[/gml]
Y en Step, compruebas el sprite actual con el anterior, y si son diferentes (si el sprite recién se ha cambiado), reiniciar image_index:
[gml]
if(sprite_index <> sprite_index_prev)
    image_index = 0;
[/gml]
Título: Re:Como iniciar los sprites siempre en la misma subimagen
Publicado por: JasperStealth en Junio 04, 2017, 04:04:10 AM
Cita de: NiuWeb en Junio 04, 2017, 12:27:49 AM
Intenta hacer esto:

En el evento Create, declara una variable que almacenará el sprite anterior:
[gml]
///Evento Create
sprite_index_prev = sprite_index;
[/gml]
Luego, en End Step, actualiza la variable.
[gml]
///Evento End Step



sprite_index_prev = sprite_index;
[/gml]
Y en Step, compruebas el sprite actual con el anterior, y si son diferentes (si el sprite recién se ha cambiado), reiniciar image_index:
[gml]
if(sprite_index <> sprite_index_prev)
    image_index = 0;
[/gml]


Amigo tu código me sirvió, curiosamente solo para el objeto player para los demás quiero hacerlo yo. Y el problema es que no entendí del todo tu código. No controlo para nada lo del End step pero he escuchado que puedes prescindir de el, al igual que del Begin step, y hacerlo todo en el Step normal. Asi que mis preguntas son:


¿Por que usas el End Step?

Cuando dices...
[gml]
///Evento Create
sprite_index_prev = sprite_index;
[/gml]
¿Ese sprite_index es el sprite que le doy por defecto al objeto?

y por ultimo ¿ por que cuando dices image_index = 0 la imagen no se queda estática en el frame 0 del sprite?

Perdón por tantas preguntas pero enserio me dejo con muchas incógnitas tu código, me sirvió pero quisiera entenderlo para poder usarlo con otros objetos.

Título: Re:Como iniciar los sprites siempre en la misma subimagen
Publicado por: bygdle en Junio 04, 2017, 04:15:44 AM
Cita de: JasperStealth en Junio 04, 2017, 04:04:10 AMCuando dices...
[gml]
///Evento Create
sprite_index_prev = sprite_index;
[/gml]
¿Ese sprite_index es el sprite que le doy por defecto al objeto?
Sí, exactamente eso.

Los eventos Begin Step, Step y End Step son casi iguales, sólo que se ejecutan primero, segundo y tercero respectivamente.

La lógica es que si cambias sprite_index en alguna parte del código que no sea End Step, la variable del sprite previo guardará el cambio, para en el siguiente fotograma tener tanto el sprite que se cambió en el fotograma actual como el sprite que tenía en el anterior.

La razón por la que no se queda estático el sprite es porque la condición evita que image_index sea 0 en todos los fotogramas, y esto es porque el sprite anterior y el actual sólo son distintos durante un fotograma; al siguiente se igualan.
Título: Re:Como iniciar los sprites siempre en la misma subimagen
Publicado por: JasperStealth en Junio 04, 2017, 10:13:14 PM
Cita de: NiuWeb en Junio 04, 2017, 04:15:44 AM
Cita de: JasperStealth en Junio 04, 2017, 04:04:10 AMCuando dices...
[gml]
///Evento Create
sprite_index_prev = sprite_index;
[/gml]
¿Ese sprite_index es el sprite que le doy por defecto al objeto?
Sí, exactamente eso.

Los eventos Begin Step, Step y End Step son casi iguales, sólo que se ejecutan primero, segundo y tercero respectivamente.

La lógica es que si cambias sprite_index en alguna parte del código que no sea End Step, la variable del sprite previo guardará el cambio, para en el siguiente fotograma tener tanto el sprite que se cambió en el fotograma actual como el sprite que tenía en el anterior.

La razón por la que no se queda estático el sprite es porque la condición evita que image_index sea 0 en todos los fotogramas, y esto es porque el sprite anterior y el actual sólo son distintos durante un fotograma; al siguiente se igualan.


Perfecto muchas gracias, ya logre adaptar el código a los demás objetos, era solo cambiarle un par de cosas y ya. Me ayudaste mucho NiuWeb. Gracias.