Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Timeghost en Abril 02, 2015, 11:42:58 PM

Título: si el personaje no se mueve, cambiar la subimagen [solucionado]
Publicado por: Timeghost en Abril 02, 2015, 11:42:58 PM
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?
Título: Re:si el personaje no se mueve, cambiar la subimagen
Publicado por: Iros en Abril 02, 2015, 11:55:15 PM
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]
Título: Re:si el personaje no se mueve, cambiar la subimagen
Publicado por: penumbra en Abril 03, 2015, 12:13:37 AM
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]
Título: Re:si el personaje no se mueve, cambiar la subimagen
Publicado por: Iros en Abril 03, 2015, 12:16:33 AM
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.
Título: Re:si el personaje no se mueve, cambiar la subimagen
Publicado por: penumbra en Abril 03, 2015, 12:22:33 AM
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)
Título: Re:si el personaje no se mueve, cambiar la subimagen
Publicado por: Timeghost en Abril 03, 2015, 01:25:55 AM
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]