Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: 15689 en Febrero 28, 2010, 11:32:36 PM

Título: acercarse a un a objeto[SOLUCIONADO]
Publicado por: 15689 en Febrero 28, 2010, 11:32:36 PM
buenas, tengo un problema con un peque?o codigo. el mismo lo que debe de hacer es que si mi personaje esta a una determinada distancia del objeto poste y si se esta apretando el boton UP el personaje se dirija hacia el punto x del poste (poste.x), y cuando personaje.x=x se quede quieto.
pero el problema que no queda al centro del poste sino que queda un poco a la derecha
les paso el codigo

if not (poste.x)-x=0
listo=true
else
listo=false

if listo=false
{
if (poste.x)-x>=-25 and (poste.x)-x<=0
 {
 if keyboard_check(vk_up) and place_meeting(x,y+1,piso)
  x=x-5
 }
 
if (poste.x)-x<=25 and (poste.x)-x>=0
 {
 if keyboard_check(vk_up) and place_meeting(x,y+1,piso)
  x=x+5
 }
}


desde ya gracias
Título: Re: acercarse a un a objeto
Publicado por: Wadk en Febrero 28, 2010, 11:54:33 PM
Debe ser por el origen del sprite del poste. Intent? con poste.x-10 o algo as? hasta que quede bien.

Por cierto, las primeras 4 l?neas de tu c?digo se pueden redondear a lo siguiente:
listo=!(poste.x-x=0);
prob? vas a ver que hace exactamente lo mismo.
Título: Re: acercarse a un a objeto
Publicado por: 15689 en Marzo 01, 2010, 12:35:22 AM
veras probe otra cosa, cambie el poste de lugar y cuando el personaje esta hacia la izq y presiono UP me queda justo en el medio del poste, pero cuando estoy hacia la der y presiono UP me queda un poco sobre la derecha, creo que no es un problema del origen, y por cierto los origenes de los 2 estan centrados
Título: Re: acercarse a un a objeto
Publicado por: Wadk en Marzo 01, 2010, 02:42:42 AM
Prob? as?:
listo=!(poste.x-x=0);

if listo=false
{
if (poste.x)-x>=-25 and (poste.x)-x<=0
  {
  if keyboard_check(vk_up) and place_meeting(x,y+1,piso)
   x=max(x-5,poste.x);
  }
 
if (poste.x)-x<=25 and (poste.x)-x>=0
  {
  if keyboard_check(vk_up) and place_meeting(x,y+1,piso)
   x=min(x+5,poste.x);
  }
}
Título: Re: acercarse a un a objeto
Publicado por: 15689 en Marzo 01, 2010, 03:01:41 AM
no funciona pero descuida ya lo solucione, lo unico que hice fue cambiar en la linea 4 lo cambie por esto
if (poste.x)-x>=-25 and (poste.x)-x<0

y en la 10
if (poste.x)-x<=25 and (poste.x)-x>0
y funciono, y gracias por el consejo de las primeras 4 lineas

ahora tengo otra duda, supongo que tengo varios objetos poste, este codigo nada mas funcioana con uno(el primero que pongo en la room), pero si me acerco a otro( pro ejemplo el segundo que pongo en la room) el codigo no funciona con este.
?como lo puedo solucionar?
Título: Re: acercarse a un a objeto
Publicado por: Wadk en Marzo 01, 2010, 05:40:13 AM
Pon? al principio:
poste_var=instance_nearest(x,y,poste);
y despu?s reemplaz? la palabra "poste" por "poste_var" en el resto del c?digo.
Título: Re: acercarse a un a objeto
Publicado por: 15689 en Marzo 01, 2010, 03:02:46 PM
funciona, gracias por tu ayuda

EDIT: em perdon se me olvidaba algo, quiero saber como le hago que para que el codigo me funcione solo con los objetos postes que estan en contacto con el piso
Título: Re: acercarse a un a objeto[CASI solucionado]
Publicado por: Wadk en Marzo 02, 2010, 01:26:30 AM
Pod?s desactivar todos los postes que no est?n en contacto con el piso antes de ejecutar el c?digo y activarlos despu?s.
Título: Re: acercarse a un a objeto[CASI solucionado]
Publicado por: 15689 en Marzo 02, 2010, 01:30:19 AM
?como lo hago, con el deactive?
Título: Re: acercarse a un a objeto[CASI solucionado]
Publicado por: Wadk en Marzo 02, 2010, 04:08:31 AM
As?:
i=0;
j[0]=0;
with(poste){
if!(esta_en_el_piso){j[i]=id;
instance_deactivate_object(id);
i+=1;
}
}
k=i;
poste_var=instance_nearest(x,y,poste);
for(i=0;i<k;i+=1){instance_activate_object(j[i]);}

listo=!(poste.x-x=0);

if listo=false
{
if (poste.x)-x>=-25 and (poste.x)-x<=0
  {
  if keyboard_check(vk_up) and place_meeting(x,y+1,piso)
   x=max(x-5,poste.x);
  }
 
if (poste.x)-x<=25 and (poste.x)-x>=0
  {
  if keyboard_check(vk_up) and place_meeting(x,y+1,piso)
   x=min(x+5,poste.x);
  }
}

Cuidado porque si el c?digo se ejecuta y no hay ning?n poste en la room podr?a tirar error. Y fijate en cambiar donde dice "esta_en_el_piso" por una funci?n o variable que indique si el poste est? en el piso.
Título: Re: acercarse a un a objeto[CASI solucionado]
Publicado por: 15689 en Marzo 02, 2010, 02:05:13 PM
hola creo que encontre una solucion mas facil,
poste_var=instance_nearest(x,y,poste)
if place_meeting(poste_var.x,poste_var.y+1,piso)
{
listo=((poste_var.x)-x=0)

if listo=false
  {
  if (poste_var.x)-x>=-25 and (poste_var.x)-x<=0
   {
   if keyboard_check(vk_up) and place_meeting(x,y+1,piso)
    x=max(x-5,poste_var.x);
   }
   
  if (poste_var.x)-x<=25 and (poste_var.x)-x>=0
   {
   if keyboard_check(vk_up) and place_meeting(x,y+1,piso)
    x=min(x+5,poste_var.x);
   }
  }
}

bueno en si este me funciona, tu que dices?
Título: Re: acercarse a un a objeto[SOLUCIONADO]
Publicado por: Wadk en Marzo 02, 2010, 08:05:37 PM
Mi c?digo siempre obtiene un poste a usar, porque s?lo busca entre los que est?n en el piso. El tuyo no se ejecuta si el poste m?s cercano no est? en el piso. Si lo que quer?s es eso, entonces us? el tuyo que seguro es m?s r?pido y menos complicado.
Título: Re: acercarse a un a objeto[SOLUCIONADO]
Publicado por: 15689 en Marzo 02, 2010, 11:12:11 PM
en si los dos me da el resultado que queria.
igual gracias por tu ayuda