Febrero 28, 2010, 11:32:36 PM Ultima modificación: Marzo 02, 2010, 04:54:07 PM por 15689
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

#1 Febrero 28, 2010, 11:54:33 PM Ultima modificación: Febrero 28, 2010, 11:56:14 PM por Wadk
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.
Vim.

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

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);
  }
}
Vim.

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?

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.
Vim.

#6 Marzo 01, 2010, 03:02:46 PM Ultima modificación: Marzo 01, 2010, 09:36:15 PM por 15689
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

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.
Vim.


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.
Vim.

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?

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.
Vim.

en si los dos me da el resultado que queria.
igual gracias por tu ayuda