Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: TheSquirrel en Febrero 18, 2016, 08:01:41 PM

Título: [Solucionado] Mirror con animacion entre izquierda y derecha
Publicado por: TheSquirrel en Febrero 18, 2016, 08:01:41 PM
Amigos,

Tengo un objeto que esta constantemente siguiendo a mi personaje principal por la espalda. Cuando mi personaje cambia de direccion, este objeto tambien lo hace, es decir, cuando mi personaje principal camina hacia la derecha, image_xscale del objeto que lo sigue es igual a 1; cuando camina hacia la izquierda, . image_xscale = -1

Queria preguntar si saben de alguna forma que cuando cambie de direccion, en el lapso entre 1 y -1 ocurra una animacion en el objeto que lo sigue, simplemente para que el cambio no sea tan brusco, y se vea como que el objeto cambia de lado con mayor fluidez y no un simple mirror.

tengo un sprites que es cuando cambia de lado de izquierda a derecha.

¡Muchas gracias! :)
Título: Re:Mirror con animacion entre izquierda y derecha
Publicado por: Clamud en Febrero 18, 2016, 08:58:43 PM
Puedes usar una variable estado que cambie entre dos valores, uno representaría el estado "siguiendo" y el otro "girando". Ejemplo:
[gml]
//Evento Step
if( ESTADO == CAMINANDO )
{
    lado = sign( obPerseguido.x - x ); //si el objeto perseguido cambia de lado
    if( lado <> 0 and lado <> image_xscale ) //y si el lado es contrario a image_xscale
    {
        ESTADO = GIRANDO; //cambiar estado a girando
        sprite_index = spr_giro; //asignar sprite
        image_speed = 0.5;
        image_index = 0;
    }
}
[/gml]
[gml]
//Evento Animation End
if( ESTADO == GIRANDO ) //cuando termina la animacion de giro
{
    ESTADO = SIGUIENDO; //cambiar estado a siguiendo
    sprite_index = spr_camina; //asignar sprite
    image_speed = 0.2;
    image_index = 0;
    image_xscale *= -1; //voltear sprite
}
[/gml]
Título: Re:Mirror con animacion entre izquierda y derecha
Publicado por: TheSquirrel en Febrero 18, 2016, 10:53:39 PM
No me ha funcionado :(
Seguramente es porque tengo que que image_xscale es igual a la direccion de obj_player. Este es el codigo que tengo en mi objeto:

Event Begin step

/////////////////////////////////////////////////////////// Obj_bug se crea
if (instance_exists(obj_player))
{
obj_bug.x = floor(obj_player.x);               //Coordenadas x
obj_bug.y = floor(obj_player.y);               //Coordenadas Y
obj_bug.image_xscale = obj_player.facing       // Si fancing = 1 es derecha; Si fancing = -1 es izquierda
}
else if (!instance_exists(obj_player))  //Si obj_player no existe, se destruye
    {instance_destroy()}



Edit

Creo que quizas el problema no se entendio del todo, asi que hice esta imagen para que se entendiera mejor:
(http://i.imgur.com/KJveNui.png)
En la imagen 1 es como inicia, en la 2, es el trayecto que me gustaria que el personaje azul hiciera para luego llegar al otro lado, que finalmente quedaria en la imagen 3. La la imagen 4 seria el trayecto de derecha a izquierda que haria si me presonaje principal volteara hacia la derecha.

Espero haberme explicado mejor. Actualmente lo que me sucede es que de la imagen 1 se salta a la 3.
Muchas gracias!
Título: Re:Mirror con animacion entre izquierda y derecha
Publicado por: Clamud en Febrero 20, 2016, 06:21:36 AM
En ese caso se puede usar menos código:
[gml]
if instance_exists( obj_player )
{
    xx = obj_player.x - obj_player.facing*16;
    yy = obj_player.y - 16;
    move_towards_point( xx,yy, 5 );
   
    if( distance_to_point(xx,yy) < 5 )
    {
        image_scale = obj_player.facing;
        //speed = 0;
        //x = xx;
        //y = yy;
    {
}
else instance_destroy();

effect_create_below( ef_spark, x,y, 0,c_aqua );
[/gml]
La última es opcional, y las algunas líneas están comentadas para dejar que la instancia vibre alrededor de la posición final.
Título: Re:Mirror con animacion entre izquierda y derecha
Publicado por: TheSquirrel en Febrero 21, 2016, 10:31:08 PM
El codigo fuciona perfectamente, pero tengo una duda, suando esta quieto esta como temblando muy rapidamente, como que tirita, a que se debe?

if instance_exists( obj_player )
{
    xx = obj_player.x - obj_player.facing*18;
    yy = obj_player.y-35 ;
    move_towards_point( xx,yy, 2);
   
    if( distance_to_point(xx,yy) < 2 )
    {
        image_scale = obj_player.facing;
        //speed = 0;
        //x = xx;
        //y = yy;
    }
}
else instance_destroy();
;


Cambie el xx;yy para que quedara en la ubicacion que queria, y disminui el move_towards_point y distance_to_point a 2. El cambio de lado se hace, pero cuando mi personaje se queda quieto, el objeto que lo sigue comienza a temblar muy rapido.
Título: Re:Mirror con animacion entre izquierda y derecha
Publicado por: Clamud en Febrero 22, 2016, 12:08:23 AM
Debes des-comentar estas líneas
[gml]
speed = 0;
x = xx;
y = yy;
[/gml]
Título: Re:Mirror con animacion entre izquierda y derecha
Publicado por: TheSquirrel en Febrero 22, 2016, 12:49:16 AM
¡Muchisimas gracias! ¡el efecto se ve genial!

Solucionado!