Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: deathmetal en Diciembre 27, 2009, 03:36:12 PM

Título: instance_nearest excepciones
Publicado por: deathmetal en Diciembre 27, 2009, 03:36:12 PM
quiero hacer que la funcion instance_nearest no tome en cuenta la instancia que tengo en la misma posicion que el objeto que llama a la funcion

alguna idea??? :(
Título: Re: instance_nearest excepciones
Publicado por: Wadk en Diciembre 27, 2009, 08:38:13 PM
Pod?s desactivarla moment?neamente. As? instance_nearest no la toma en cuenta.
O pod?s usar ?ste (http://www.gmlscripts.com/script/instance_nth_nearest) script.
Título: Re: instance_nearest excepciones
Publicado por: KrakenHimoto en Diciembre 27, 2009, 11:32:51 PM
Tambi?n podes usar este script, que hasta donde pude probar se ejecuta mucho mas r?pido que el que sugiere Wadk.

//Encuentra la instancia mas cercana que no seas vos mismo

// Ej: instance_nearest_id(x,y,obj)
var xx,yy,n,ds,ins;
xx = argument0;
yy = argument1;
n = instance_number(argument2);
ds = ds_priority_create();

with (argument2) ds_priority_add(ds,id,sqr(x-xx)+sqr(y-yy));

ds_priority_delete_min(ds);

ins = ds_priority_find_min(ds);

ds_priority_destroy(ds);
return ins;
Título: Re: instance_nearest excepciones
Publicado por: deathmetal en Enero 02, 2010, 12:28:00 AM
aver a ver lo logro comprender del todo esos codigos


bueno quiero que una variable tome la id de la instancia mas cercana de un mismo tipo de objetos excepto la que tengo en mi misma posicion y lo hago asi

variable=instance_nearest(x,y,obj1)

siendo obj1 un objeto diferente al que llamala funcion, pero no quiero que me reconozco a la instancia de ob1 que este en la misma posicion del que llama a la funcion
Título: Re: instance_nearest excepciones
Publicado por: Wadk en Enero 02, 2010, 01:46:06 AM
Pon? el codigo de Kraken en un script y llamalo instance_nearest_id. Despu?s us? este c?digo:
instance_nearest_id(x,y,obj1);
y listo.
Título: Re: instance_nearest excepciones
Publicado por: deathmetal en Enero 02, 2010, 03:33:21 AM
bueno, si, el codigo funciona bien, sin embargo me di cuenta que no es lo que necesito... gracias de todas formas..

planteare de una manera diferente no  se si haga falta crear otro tema:

quiero crear unos mu?equitos (personas aleatorias) que se muevan a puntos aleatorios

pense en hacerlo colocando obejtos invisibles por todos lados y que se vayan al mascercano sin embargo al usar ese codigo que m dieron seva al mas cercano, lo ignora un step y despues regresa...

quiero que se vaya de uno a otro y asi para dar la sensacion de movimiento aleatorio
Título: Re: instance_nearest excepciones
Publicado por: Wadk en Enero 02, 2010, 07:56:12 AM
Bueno, la verdad, no ented?, pero leyendo tus anteriores posts creo que ahora si entiendo a lo que te refer?as. Vas a tener que usar el script que puse yo:
/*
**  Usage:
**      inst = instance_nth_nearest(x,y,obj,n);
**
**  Arguments:
**      x,y       a point
**      obj       an object_index, or keyword "all"
**      n         proximity
**
**  Return:
**      inst      (n)th nearest instance id of type
**                (object) to the given point (x,y),
**                or keyword "noone" if none found.
**
**  GMLscripts.com
*/
{
    var pointx,pointy,object,n,list,nearest;
    pointx = argument0;
    pointy = argument1;
    object = argument2;
    n = argument3;
    n = min(max(1,n),instance_number(object));
    list = ds_priority_create();
    nearest = noone;
    with (object) ds_priority_add(list,id,distance_to_point(pointx,pointy));
    repeat (n) nearest = ds_priority_delete_min(list);
    ds_priority_destroy(list);
    return nearest;
}

llamalo instance_nth_nearest y usalo as?:
variable=instance_nth_nearest(x,y,obj1,2);
Título: Re: instance_nearest excepciones
Publicado por: Raul_Omega en Enero 02, 2010, 08:13:10 PM
Cita de: deathmetal en Enero 02, 2010, 03:33:21 AM
bueno, si, el codigo funciona bien, sin embargo me di cuenta que no es lo que necesito... gracias de todas formas..

planteare de una manera diferente no  se si haga falta crear otro tema:

quiero crear unos mu?equitos (personas aleatorias) que se muevan a puntos aleatorios

pense en hacerlo colocando obejtos invisibles por todos lados y que se vayan al mascercano sin embargo al usar ese codigo que m dieron seva al mas cercano, lo ignora un step y despues regresa...

quiero que se vaya de uno a otro y asi para dar la sensacion de movimiento aleatorio

?Los puntos aleatorios son puntos concretos en una room o simplemente quieres decir que vayan a posiciones aleatorias dentro de una room?

En el primer caso, lo mas facil seria definir una "x" y una "y" destino aleatoriamente y despues cuando el mu?equito la alcance definir otra direccion.

En el segundo caso podrias crear una matriz digamos pos[i,j] donde:

   - i: Indice de la posicion
   - j: 1 : coordenada x
         2 : coordenada y
De esta forma eliges aleatoriamente un i y cuando llegues al destino vuelves a elegir otra i.

No se si es lo que buscabas.

Un saludo
Título: Re: instance_nearest excepciones
Publicado por: deathmetal en Enero 02, 2010, 10:16:58 PM
el problema de elegir un x y y al azar es que que tal si cae en un lugar inaccesible y no m refero solo a que coincida con un objto solido, si no que, talvez estando libre la posicion pero esta se encuentre rodeada de solidos y no podria pasar xD

wadk no me ha servido cuando llega a un punto se queda quieto :(