hola, estoy creando un juego genial, parecido a los sims, hay varios personajes (aleatorios); ya están hechos todos los sprites, hay varios sprites uno para la base, ropa..., todo sincronizado en la animación; quisiera que cuando uno de los personajes dejara de moverse, cambiara la subimagen a la "0" que es en la que estan quietos, y si se mueven, que continúen con la animación; son varios personajes, pero es solo un objeto para todos los personajes. saben como hacer eso?
Tendrías que tener un "flag" que indique el estado, es decir, una variable como por ejemplo "enMovimiento" que en el Create de tu personaje esté así:
[gml]
enMovimiento = false;
[/gml]
Después en el evento Step tendrías que comprobar si se dejó de mover, como por ejemplo comprobando la velocidad y que no tenga ninguna acción asignada (en el caso que se le puedan asignar acciones):
[gml]
if (speed == 0 && accion == 0) //Comprobamos que esté en reposo.
if (enMovimiento) enMovimiento = false; //Si la variable estaba como TRUE, la cambiamos a FALSE.
if (speed != 0) //Si se está moviendo.
if (!enMovimiento) enMovimiento = true; //Si la variable estaba en FALSE la cambiamos a TRUE.
[/gml]
Luego sería cuestión de comprobar el estado de "enMovimiento" en el mismo evento:
[gml]
if (enMovimiento) { //Si enMovimiento está en TRUE.
image_speed = .5; //Acá se ajusta la velocidad de la animación.
} else { //Si está en FALSE...
image_speed = 0; //Paramos la animación.
image_index = 0; //Y definimos la subimagen en la primera.
}
[/gml]
No lo he probado, pero creo que esto debería funcionar:
[gml]
if (xprevious == x)
{
image_index = 0 //Pasar a la primer subimagen cuando la coordenada X no cambia
}
[/gml]
penumbra, como lo pusiste tendrías que comprobar también con yprevious porque si se mueve solamente en el eje Y no se ejecutaría la animación.
sí, desde luego, Iros. Como para Y es exactamente lo mismo, sólo quise expresar la idea básica (por eso especifiqué que se trataba de la coordenada X en el comentario)
Muchas gracias XDD, despues de editar un poco, me funciono, así me quedo (ejemplo):
[spoiler]var indice_propio=-1
if (xprevious == x && yprevious == y)
{
enmovimiento== 0
} else { enmovimiento==1}
if enmovimiento==1 {indice_propio=-1}else {indice_propio=0}
if base==1 {draw_sprite(basea,indice_propio,x,y)}
[/spoiler]