He estado creando un IA top down y hay algo que no me sale, como puedo hacer que cuando la variable critical_health sea true el objeto automáticamente busque obj_wall mas cercano y se cubra si es posible por ejemplo si el enemigo esta a la derecha que el objeto se cubra a la izquierda para que la bala del enemigo no le pueda alcanzar?
Padre Nuestro del Programador de C           
C Nuestro que estas en la Memoria,
Compilado sea tu código,
venga a nosotros tu software,
carguense tus punteros.
así en la RAM como en el Disco Duro,
Danos hoy nuestro Array de cada día,
Perdona nuestros Warnings,
así como nosotros también los eliminamos,
no nos dejes caer en Bucles,
y libranos del Windows, Enter.

No tengo cómo probar ahorita los códigos pero creo que se puede hacer usando los siguientes códigos: instance_nearest, bbox_...(left,right,top,bottom), collision_rectangle, mp_potential_step.

Avísame si sabes mas o menos lo que te estoy hablando, si no para hacerte un ejemplo cuando pueda.
Solo intento crear ideas, en forma de obras de arte interactivas.

var a, b, c, dir;
a=instance_nearets(x,y,objEnemigo); //id del enemigo ma cercano
b=point_direction(a.x,a.y)  //posicion del enemigo mas cercano.
c=(b+180 mod(360)) //dirección contraria a la del enemigo, osea para emprender la huida.
direction=dir;
dir=c speed=3;
lo demas es verificar si hay una pared en su camino, y colocarse detras. Eso lo podrias hacer verificando colision.

elvis, ¿el mod(360) es para qué?
Solo intento crear ideas, en forma de obras de arte interactivas.

Es un modulador es este caso al realizar la operacion matematica que le indique me devolvera el lado contrario en grados. osea la direccion contraria.
Funciona asi la relacion matematica de  MOD
El operador mod devuelve el resto obtenido dividiendo sus operandos. En otras palabras, x mod y =  x – (x div y) * y.

Pero ya con el b+180 no devuelve la dirección contraria sin necesidad de colocar el mod(360)?
Solo intento crear ideas, en forma de obras de arte interactivas.

Lo hice hace un tiempo como as dicho y en ocasiones tenia algunos errores, por ello use el mod, y funciono perfecto.

Cita de: elviskelley en Abril 20, 2013, 02:01:14 AM
var a, b, c, dir;
a=instance_nearets(x,y,objEnemigo); //id del enemigo ma cercano
b=point_direction(a.x,a.y)  //posicion del enemigo mas cercano.
c=(b+180 mod(360)) //dirección contraria a la del enemigo, osea para emprender la huida.
direction=dir;
dir=c speed=3;
lo demas es verificar si hay una pared en su camino, y colocarse detras. Eso lo podrias hacer verificando colision.
elvis con este script lo que hace el objeto es ir a la dirección contraria pero yo lo que necesito es que el objeto no comience a ir a la dirección contraria si no que busque el objeto obj_wall mas cercano y se ponga detrás por ejemplo si el enemigo esta a la derecha el objeto busque el obj_wall y se ponga detrás (para que las balas del enemigo no le puedan alcanzar)
Padre Nuestro del Programador de C           
C Nuestro que estas en la Memoria,
Compilado sea tu código,
venga a nosotros tu software,
carguense tus punteros.
así en la RAM como en el Disco Duro,
Danos hoy nuestro Array de cada día,
Perdona nuestros Warnings,
así como nosotros también los eliminamos,
no nos dejes caer en Bucles,
y libranos del Windows, Enter.