Buen dia, soy principiante en esto de GM, tengo GM 1.867

Lo que pasa es que quiero que mi un objeto encuentre al enemigo mas cercano a el, para esto uso el siguiente codigo en Draw

var inst = instance_nearest(x, y, obj_enemigo);
    if inst != id
       {
       draw_line(x, y, inst.x, inst.y);
   }


lo probe cuando el room solo tiene un objeto enemigo y funciona, pero cuando el enemigo muere se borran todos los otros objetos del room (exepto uno que se dibuja hasta el fondo). asi que agregue lo siguiente


if object_exists(obj_enemigo){
    var inst = instance_nearest(x, y, obj_enemigo);
    if inst != id
       {
       draw_line(x, y, inst.x, inst.y);
   }
}


pero sigue pasando lo mismo, en el room agregue otro objeto enmigo, al principio igual funciona y se dibuja la linea pero, cuando muere cualquiera de los dos objetos igual.

¿que estoy haciendo mal?

muchas gracias por sus respuestas

¿Qué código usás para matar al enemigo, y qué tiene que ver con el código que pusiste o con encontrar al enemigo más cercano?
Vim.

El error salta a la vista. El codigo "instance_nearest(x, y, obj_enemigo)" busca la instancia mas cercana a un punto (x,y), el tipo de instancia que busca pertenece al objeto "obj_enemigo" si pones que en mismo objeto (obj_enemigo) que busque la instancia mas cercana y a su vez la posicion (x,y) es la ubicacion actual de la misma el codigo tiene devolverte la misma instancia. En conclusion dibujarias en vez de una linea un punto como este: draw_line(x,y,x,y);

Una forma de hacerlo seria:
var inst;
X=x;
Y=y;
x=-10000;
y=-10000;
inst = instance_nearest(X, Y, object0);
if inst != id
{
draw_line(X, Y, inst.x, inst.y);
}
x=X;
y=Y;


O usa el script que hice llamado "Instancia_Cercana":

/*
Es igual que instance_nearest pero obviando la instancia que ejecuta el metodo;
Instancia_Cercana(x,y,objeto);
*/
global._RoMoN_Id = noone;
global._RoMoN_V=true;
global._RoMoN_Dis=0;
with(argument2)
{
if ((point_distance(x,y,other.argument0,other.argument1)<global._RoMoN_Dis)
|| (global._RoMoN_V))
&& (id!=other.id)
{
  global._RoMoN_V=false;
  global._RoMoN_Dis = point_distance(x,y,other.argument0,other.argument1);
  global._RoMoN_Id=id;
}
}

return(global._RoMoN_Id);


y pone en tu codigo:

var inst;
inst = Instancia_Cercana(x, y, obj_enemigo,id);

if instance_exists(inst)
{draw_line(x, y, inst.x, inst.y);}

Cita de: romon_28 en Abril 25, 2013, 02:50:11 PM
El error salta a la vista. El codigo "instance_nearest(x, y, obj_enemigo)" busca la instancia mas cercana a un punto (x,y), el tipo de instancia que busca pertenece al objeto "obj_enemigo" si pones que en mismo objeto (obj_enemigo) que busque la instancia mas cercana y a su vez la posicion (x,y) es la ubicacion actual de la misma el codigo tiene devolverte la misma instancia. En conclusion dibujarias en vez de una linea un punto como este: draw_line(x,y,x,y);

Una forma de hacerlo seria:
var inst;
X=x;
Y=y;
x=-10000;
y=-10000;
inst = instance_nearest(X, Y, object0);
if inst != id
{
draw_line(X, Y, inst.x, inst.y);
}
x=X;
y=Y;


Gracias por sus respuestas. pero no me va ese codigo, cuando no existen mas instancias del objeto se traba