Qué tal, comunidad. Es mi primera vez posteando acá.
Bueno, la cuestión es así: tengo un personaje que, cuando pulso "abajo", éste se agacha. Sin embargo, lo que quiero lograr es que muestre una animación de como se va agachando. Sin embargo, hay un par de cosas a tener en cuenta:
1) El idle (o sea, cuando está parado sin hacer nada) tiene una animación de respirar spr_prota_quieto
2) Tengo una animación de como cambia de estar parado a estar agachado spr_prota_agachandose
3) Una vez agachado, éste tiene una animación de estar respirando. spr_prota_agachado
Es decir, tengo una animación para cada uno de los estados, así que no puedo poner un "image_index" que detenga la animación en el último sprite del personaje agachándose, porque entonces éste no tendría la animación de respirar.
Pensé en crear objetos distintos, y destruir la instancia al terminar la animación de estar agachándose y crear la otra instancia donde el personaje ya se encuentre agachado y respirando. Pero creo que no es la manera más práctica de hacerlo. ¿Alguna idea? dejo todas mis esperanzas en esta comunidad, que por lo que vi, es buenísima!!
Saludos y gracias de antemano
Usar diferentes objetos para diferentes estados es una opcion mas. Me puse a hacer un ejemplo y en unos minutos ya lo tenia hecho.
Si te sirve y te es facil de esa forma hacelo asi(subo un ejemplo).
Yo crearia variables con las "Alarmas" Ejemplo... Si el personaje esta caminando deberia mostrar su Spr_Caminando Obviamente, pero al soltar la tecla que hace avanzar al personaje este caeria inmediatamente al Spr_Quieto osea aqui es donde tiene la animación de respirar y coloco una variable que me controle la duración de inactividad...
Ejemplo:
Create
Aqui colocamos una "set variable" y dentro de "variable" colocaremos alarm[0] y en "value" colocas el tiempo que dure el personaje antes de sentarse. En este mismo evento colocaremos un "set alarm" y en numer for steps colocaremos nuevamente el tiempo que durara el personaje para sentarse
Alarm 0
Ya habiendo hecho lo primero ahora procederemos a poner una "change sprite" y dentro de ella el "Sprite" del personaje sentandose mas la velocidad de la image y el numero de subimage con el que empezara.
Step
Aqui colocaremos una "test variable" en "variable" colocaremos alarm[0] y en "value" colocaremos un cero("Esto definira que pasa cuando la alarma pasa de cero"). Ahora colocamos un start Block luego una "set variable" en "variable" pondremos "alarm[0]" y en "value" nuevamente colocaremos el tiempo que le tomara al personaje sentarse, damos "OK" y por ultimo colocaremos un "end block".
Nota: Ya habiendo hecho todo lo anterior deberemos proceder a nuestras configuraciones del "teclado" osea, debemos ir a la parte donde tenemos programado el movimiento, imagen y velocidad del personaje al precionar una tecla
Ya estando aqui deberemos hacer esto... Ejemplo:
//Controles de movimiento.
if keyboard_check(vk_down){
sprite_index = /Sprite del personaje hacia abajo;
alarm[0]=//Tiempo que tomara en sentarse;
y+=4;
}
if keyboard_check(vk_right){
sprite_index = /Sprite del personaje hacia la derecha;
alarm[0]=//Tiempo que tomara en sentarse;
x+=4;
}
if keyboard_check(vk_up){
sprite_index = /Sprite del personaje hacia arriba;
alarm[0]=//Tiempo que tomara en sentarse;
y-=4;
}
if keyboard_check(vk_left){
sprite_index = //Sprite del personaje hacia la izquierda;
alarm[0]=//Tiempo que tomara en sentarse;
x-=4;
}
Las variables de "alarma" que tenemos en cada tecla no permitira que el personaje se siente cada vez que pasen el tiempo cuando caminamos en vez de no estar haciendo nada, no obstante estas si iniciaran cuando el personaje no este haciendo nada.
Cita de: HKaichim en Septiembre 11, 2018, 06:36:13 AM
Yo crearia variables con las "Alarmas"
No estoy seguro de haberte entendido bien, sin embargo, probé con alarmas (lo cual te adelanto desde ya que no me funcionó), pero me dio una idea la cual me ayudó a acercarme bastante.
Pero el problema radica en que no puedo controlar la velocidad de la animación del protagonista mientras se está agachando, pese a modificar su image_speedLos pasos a continuación:
Notá la existencia de las dos animaciones que mencionaré:
spr_prota_agachandose es la animación del protagonista mientras se está agachando
spr_prota_agachado es la animación del personaje ya estando agachado, que durará hasta que no suelte la tecla "abajo"
Primero, en el evento create, definí una variable
agachado = false //que cambiará de estado dependiendo de si esté pulsando o no la tecla de agacharme
Luego, en el evento step, dispuse el código siguiente:
if keyboard_check(vk_down) and agachado == false //si la tecla "abajo" está pulsada y agachado está como "false"
{
sprite_index = spr_prota_agachandose //cambiará a la animación del personaje agachándose
image_speed = 0.1 //la animación se moverá con esta velocidad
}
if sprite_index == spr_prota_agachandose //si la animación actual es la del personaje agachándose...
{
if image_index == 2 //y si se encuentra en el fotograma "2" (la animación consta de 3 fotogramas, que serían 0, 1, 2
//y me interesa el último de todos estos)
{
agachado = true //la variable cambiará a true
}
}
if agachado == true //finalmente, si agachado es true
{
sprite_index = spr_prota_agachado //cambiará al sprite de estar ya agachado, con la animación de respirar
image_speed = 0.05 //con esta velocidad de animación
}
En sí, funciona, la animación se ejecuta, pero lo hace demasiado rápido y prácticamente ni se aprecia. Si cambio el "image_speed" de spr_prota_agachandose, no cambia nada, por más lenta que quiera ponerla. ¿Qué estoy haciendo mal?
Cita de: 3dgeminis en Septiembre 11, 2018, 05:09:42 AM
Usar diferentes objetos para diferentes estados es una opcion mas. Me puse a hacer un ejemplo y en unos minutos ya lo tenia hecho.
Si te sirve y te es facil de esa forma hacelo asi(subo un ejemplo).
Acabo de ver tu ejemplo (soy nuevo en la comunidad y no tenía idea de cómo aparecían los archivos adjuntos)
Es precisamente eso lo que quiero lograr, pero quería intentarlo en forma de código para no tener tantos archivos en el árbol de recursos. Te agradecería si leés mi comentario anterior, donde le explico al otro usuario de forma detallada el código que creé, a ver si vos también podés darme una mano con eso :)
Pero si no me queda más remedio, tendré que hacerlo así, con objetos.
Muchas gracias!!!!!!
Cita de: javixblack en Septiembre 12, 2018, 03:49:54 AM
Cita de: 3dgeminis en Septiembre 11, 2018, 05:09:42 AM
Usar diferentes objetos para diferentes estados es una opcion mas. Me puse a hacer un ejemplo y en unos minutos ya lo tenia hecho.
Si te sirve y te es facil de esa forma hacelo asi(subo un ejemplo).
Acabo de ver tu ejemplo (soy nuevo en la comunidad y no tenía idea de cómo aparecían los archivos adjuntos)
Es precisamente eso lo que quiero lograr, pero quería intentarlo en forma de código para no tener tantos archivos en el árbol de recursos. Te agradecería si leés mi comentario anterior, donde le explico al otro usuario de forma detallada el código que creé, a ver si vos también podés darme una mano con eso :)
Pero si no me queda más remedio, tendré que hacerlo así, con objetos.
Muchas gracias!!!!!!
Si debes saber mas o menos como programar los eventos, vere si grabo como hacerlo y te lo paso a ver si lo haces, otra cosa en
"Change Sprite" debe tener si o si una velocidad de 0.1, ya que a mi tambien se me ah puesto loca la animacion con las alarmas, pero lo eh reparado y tomo me va exelente...
Si se puede en codigo, subo un ejemplo para no tener que escribir todo aqui :P, solo debes importarlo.
Cita de: 3dgeminis en Septiembre 12, 2018, 06:54:11 AM
Si se puede en codigo, subo un ejemplo para no tener que escribir todo aqui :P, solo debes importarlo.
Jah! debo admitir que este codigo es mucho mas factible y ligero que tener mas de 1000 alarmas y eventos para hacer lo mismo xD!
Cita de: 3dgeminis en Septiembre 12, 2018, 06:54:11 AM
Si se puede en codigo, subo un ejemplo para no tener que escribir todo aqui :P, solo debes importarlo.
Pero no obstante, en mi caso yo necesito que el personaje caiga en una animación luego de un tiempo de inactividad... como harias para ese caso?
Cita de: 3dgeminis en Septiembre 12, 2018, 06:54:11 AM
Si se puede en codigo, subo un ejemplo para no tener que escribir todo aqui :P, solo debes importarlo.
Sos un fenómeno, viejo!!!!!!!! mil gracias :D De esta manera todo se reproduce parejo, sin embargo, quise modificarle el image_speed de las animaciones "spr_agacharse" y "spr_pararse" (porque quiero que se agache y levante relativamente rápido) y no funciona, la animación se repite incesantemente una vez presionada la tecla. (Son las dos líneas de código junto a los comentarios "AGREGUÉ ESTO")
//AGACHARSE////////////////////////////////////////////////////////////////////
if estado="agacharse"
{
sprite_index=spr_agacharse
image_speed = 0.1 //////////AGREGUÉ ESTO
if image_index=6
{
estado="agachado"
image_index=0
}
}
//LEVANTARSE////////////////////////////////////////////////////////////////////
if estado="levantarse"
{
sprite_index=spr_levantarse
image_speed = 0.1 /////////////AGREGUÉ ESTO
if image_index=6
{
estado="parado"
image_index=0
}
}
//PARADO////////////////////////////////////////////////////////////////////
if estado="parado"
{
sprite_index=spr_parado
if keyboard_check(vk_down)
{
estado="agacharse"
image_index=0
}
}
//AGACHADO////////////////////////////////////////////////////////////////////
if estado="agachado"
{
sprite_index=spr_agachado
if !keyboard_check(vk_down)
{
estado="levantarse"
image_index=0
}
}
Gracias y saludos :)
En realidad hiciste que vaya mas lento (0.1) de lo que estaba (0.2) :-[.
Recuerda cambiar la velocidad en TODOS los estados o todos los sprites usaran esa velocidad por defecto.
La solucion es cambiar if image_index=6 por if image_index>=6
Dependiendo de la velocidad GM puede saltarse alguna imagen.
Cita de: 3dgeminis en Septiembre 12, 2018, 07:38:16 PM
En realidad hiciste que vaya mas lento (0.1) de lo que estaba (0.2) :-[.
Recuerda cambiar la velocidad en TODOS los estados o todos los sprites usaran esa velocidad por defecto.
La solucion es cambiar if image_index=6 por if image_index>=6
Dependiendo de la velocidad GM puede saltarse alguna imagen.
Sos un genio!!! Funcionó de diez, entonces el problema de que se repetía el la animación una y otra vez al cambiar la velocidad, es debido a que "si el sprite es el nº 6, cambiar de animación", pero iba tan rápido que, como bien dijiste, se salteaba el sprite nº6, así que si defino "si el sprite es mayor o igual al nº6, cambiar de animación" funciona adecuadamente (lo que es raro, porque después del nº 6 vuelve al cero y no podría haber un valor mayor que ése). Pero gracias por todo, ya puedo dar como resuelto mi problema ^^