Como hago para que un auto se diriga al objeto(espacio_libre) segundo mas cercano si la primera instacia de espacio libre tiene la variable ocupado en 1

el auto chequee si el espacio_libre mas cercano tiene la variable ocupado en 0 ,si la primer instancia mas cercana tiene ocupado en 1 que se diriga a la instancia segunda mas cercana y si esta tiene ocupado en 0 que se detenga hay.


Lo suyo seria primero comprobar la distancia de todos los elementos descartando a quien este "ocupado" y luego seleccionar al que este más cerca.
Si pasases el código utilizado podría entender mejor que ocurre.

en el objeto auto solo tengo step esto

move_towards_point(instance_nearest(x,y,espacio).x,instance_nearest(x,y,espacio).y,2)



en el evento create del objeto espacio tengo
ocupado=choose(1,0)

with(Aparcamiento) if(!ocupado){move_toward_point() break}

A ver si así se soluciona.

Hola. Puedes usar un script como el siguiente:
[gml]
/* scEspacioLibre */

global.mapa = ds_map_create();
var distancia, instancia;

//Almacenar en un mapa las distancias junto con los id de las instancias desocupadas
with( espacio_libre )
{
    if( not ocupado )
    ds_map_add( global.mapa, point_distance(x,y,other.x,other.y), id );
}

//Si hay instancias desocupadas
if( ds_map_size(global.mapa) > 0 )
{
    //Encontrar la distancia más pequeña con el id correspondiente
    distancia = ds_map_find_first( global.mapa );
    instancia = ds_map_find_value( global.mapa, key );
    ds_map_destroy( global.mapa );
    return instancia;
}
else //Si no hay instancias o todas están ocupadas
{
    //Devolver la constante "ninguna"
    ds_map_destroy( global.mapa )
    return noone;
}
[/gml]
que te devuelve el id de la instancia desocupada más cercana.
Después puedes usar la función de movimiento que te mencionaron.

pero como pongo ese script? que objeto debe ejecutarlo? ademas no tiene argumentos?
math no me funciono lo que pusiste.
ayudenme

Para usarlo agrega un nuevo recurso script y copia el código, dale un nombre claro, a mi se me ocurrió "scEspacioLibre", pero tú nombralo como más te convenga.
El objeto que debe ejecutarlo es el que se mueve, o el objeto a partir del cual se mide la distancia. Cada vez que necesites saber cuál es el espacio libre más cercano ejecuta la siguiente línea:
[gml]cercano = scEspacioLibre();[/gml]
así sin argumentos. Ésto puede ir en el evento step, o en otro evento si no quieres que se haga el chequeo constantemente.
Entonces obtenemos las coordenadas del punto al que debe moverse el objeto:
[gml]
xto = cercano.x;
yto = cercano.y;
[/gml]
Y entonces puedes usar alguna de las funciones que aparecen en las secciones "Movement" o "Motion Planning", del manual, para realizar el movimiento.