Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: IPIDE en Abril 20, 2010, 02:09:44 PM

Título: Cambio de velocidad de un objeto
Publicado por: IPIDE en Abril 20, 2010, 02:09:44 PM
Hola amigos.

?Podr?an explicarme c?mo puedo hacer que un enemigo cambie su velocidad cuando el jugador se encuentre a una determinada distancia de ?l? En mi juego de plataformas quiero que el enemigo embista al jugador en cuanto ?ste se le acerque un poco, pero no estoy consiguiendo nada.

Muchas gracias de antemano y un saludo a la comunidad.
Título: Re: Cambio de velocidad de un objeto
Publicado por: 3dgeminis en Abril 20, 2010, 02:55:46 PM
Usa la funcion distante_to_object o distance_to_point
Por ejemplo asi:
if distante_to_object(jugador)<20 {lo que queres que haga el enemigo}
Título: Re: Cambio de velocidad de un objeto
Publicado por: IPIDE en Abril 20, 2010, 05:37:45 PM
Hola 3dgeminis.

He a?adido al c?digo lo que sugeriste pero me se?ala que la funci?n "distance_to_object" es desconocida. ?Se te ocurre algo?. Gracias por tu atenci?n.
Título: Re: Cambio de velocidad de un objeto
Publicado por: IPIDE en Abril 20, 2010, 06:19:53 PM
?Qu? mam?n! Claro que existe la funci?n, es que lo hab?a escrito mal. De todas formas sigue sin funcionar. ?Ayudaaaa!
Título: Re: Cambio de velocidad de un objeto
Publicado por: Croer en Abril 20, 2010, 07:31:31 PM
mira que no lo hayas puesto en un event equivocado, porque si lo pones en el evento create seguro que no te funciona o quiza la distancia de 20 es demasiado peque?a para que el enemigo pueda hacer la accion, tambien puede ser que este mal la accion que esta entre {}, si pudieras poner el c?digo quiza seria mas facil darte una soluci?n, igualmente mira lo que te dicho que puede ser que falle una de esas cosas. Espero que te sea ?til. :)
Título: Re: Cambio de velocidad de un objeto (SOLUCIONADO)
Publicado por: IPIDE en Abril 20, 2010, 08:29:03 PM
Hola Croer.

?Lo que me dijo G?minis me ha funcionado de maravilla! Ahora me gustar?a que cuando el enemigo haya cambiado de velocidad tambi?n cambie de sprite, es decir, que no s?lo se mueva m?s r?pido, sino que su sprite pase de "caminando" a "corriendo". Os dejo el c?digo, pero si estoy infringiendo alguna norma y debo hacer esta pregunta en un tema distinto, por favor, h?ganmelo saber.

Reciban un saludo y mi agradecimiento.

//argument0= el personaje a perseguir.

//argument1= velocidad andando

//argument2= velocidad corriendo

argument0=obj_personaje;
argument1=2;
argument2=4;

if x>obj_personaje.x {sprite_index=cabra_I;}
if x<obj_personaje.x {sprite_index=cabra_D;}

if place_free(x,y+1){gravity=0.5}else{gravity=0;}

var dir;

dir=(x<argument0.x)*2-1

if place_free(x+5*dir,y){ x+=argument1*dir}

if distance_to_object(obj_personaje)<100{ x+=argument2*dir}
Título: Re: Cambio de velocidad de un objeto
Publicado por: 3dgeminis en Abril 21, 2010, 02:21:39 AM
Proba est codigo (no esta probado :-[)
var dir;

dir=(x<argument0.x)*2-1

if place_free(x,y+1){gravity=0.5}else{gravity=0;}

{
if place_free(x+5*dir,y){ x+=argument1*dir ; sprite_index="CAMINANDO"}

if distance_to_object(obj_personaje)<100{ x+=argument2*dir ; sprite_index="CORRIENDO"}
}
else
{
if x>obj_personaje.x {sprite_index=cabra_I;}
if x<obj_personaje.x {sprite_index=cabra_D;}
}
Título: Re: Cambio de velocidad de un objeto
Publicado por: IPIDE en Abril 21, 2010, 10:41:07 AM
Hola, gracias por la ayuda, me est? sirviendo de mucho.

Cuando el enemigo se acerca al jugador, se aumenta su velocidad y cambia de sprite (de "andando" a "corriendo").

Si el jugador se aleja, el enemigo vuelve a su velocidad inicial y al sprite de "andando".

Hasta aqu?, perfecto.

El problema es que no consigo que el sprite de correr sea el adecuado seg?n la direcci?n por la que se acerque el enemigo. Si se acerca por la derecha, debe cambiar a un sprite de "corriendo derecha" y si lo hace por la izquierda, a otro sprite de "corriendo izquierda" (?Algo que s? hace cuando est? andando!).

He probado con "xscale" pero nada. Les dejo el c?digo actual para ver si se les ocurre una soluci?n. Mil gracias por adelantado.


//argument0 el objeto a perseguir.

//argument1 velocidad andando

//argument2 velocidad corriendo

argument0=obj_personaje;
argument1=2;
argument2=4;

if x>obj_personaje.x {sprite_index=cabra_I;}
if x<obj_personaje.x {sprite_index=cabra_D;}

if place_free(x,y+1){gravity=0.5}else{gravity=0;}

var dir;

dir=(x<argument0.x)*2-1

if place_free(x+5*dir,y){ x+=argument1*dir}


if distance_to_object(obj_personaje)<100{ x+=argument2*dir; sprite_index=cabra_corriendo_I;}


Título: Re: Cambio de velocidad de un objeto
Publicado por: Croer en Abril 21, 2010, 05:21:30 PM
no lo he provado pero creo que a?adiendo esto funcionara:
//argument0 el objeto a perseguir.

//argument1 velocidad andando

//argument2 velocidad corriendo

argument0=obj_personaje;
argument1=2;
argument2=4;

if x>obj_personaje.x {sprite_index=cabra_I;}
if x<obj_personaje.x {sprite_index=cabra_D;}

if place_free(x,y+1){gravity=0.5}else{gravity=0;}

var dir;

dir=(x<argument0.x)*2-1

if place_free(x+5*dir,y){ x+=argument1*dir}

////////////trozo modificado//-> yo he puesto argument0.x en vez de obj_personaje.x
if distance_to_object(obj_personaje)<100{
x+=argument2*dir;
if x>argument0.x{sprite_index=cabra_corriendo_I;}
if x<argument0.x{sprite_index='el nombre del sprite'}
}

Esto seria simplemente igual que cuando anda, tienes que verificar si la x es mas grande o mas peque?a para cambiar de sprite, espero que te funcione  :)
Título: Cambio de velocidad de un objeto (SOLUCIONADO)
Publicado por: IPIDE en Abril 21, 2010, 06:52:22 PM
?Much?simas gracias Croer! ?Tu cambio funciona a la perfecci?n! No s? qu? hubiera hecho sin vosotros. Recibid un afectuoso saludo.