Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: TheJaj en Marzo 07, 2018, 05:46:09 PM

Título: Programar IA para recolección de recurso capaz de ver su "entorno"
Publicado por: TheJaj en Marzo 07, 2018, 05:46:09 PM
Bueno, estoy haciendo un juego que tiene un mínimo de estrategia a la hora de recolectar recursos y por ende he programado la IA para ir de un punto "A" a un punto "B", pero es incapaz de rodear objetos que obstruyan su camino.

¿Algún consejo?

P.D: El utilizar path no me ha servido ya que los recursos los considero objetos que obstruyen el camino y por ello, los "peones" no se mueven hasta estos.
Título: Re:Programar IA para recolección de recurso capaz de ver su "entorno"
Publicado por: shaoran en Marzo 07, 2018, 06:04:15 PM
Hola TheJaj,

Lo que puedes hacer es algo como lo que te muestro a continuacion:

Step

if instance_exists (obj_B)
{
var inst;
inst = instance_nearest (x, y, obj_B);
mp_potential_step_object (inst.x, inst.y, 5, obj_Wall);
}



Descripción
Esta función permite que la instancia se mueva hacia una posición en particular definida por x / y, mientras intenta evitar los demas objetos.
Cuando la instancia colisione con una instancia del objeto especificado por el argumento "obj", esta cambiará la dirección del movimiento para tratar de evitar esa instancia y moverse alrededor de ella.
No siempre funciona pero en casos sencillos si.

Título: Re:Programar IA para recolección de recurso capaz de ver su "entorno"
Publicado por: TheJaj en Marzo 07, 2018, 09:17:14 PM
Si bien funciona, tengo el problema de que tengo edificios interactuables que tienen la "colisión" para evitarlos. Y lo que quiero es que eviten estos edificios si su objetivo es ir a por madera en lugar de ir a un altar.

Tienes algún otro consejo? xD
Título: Re:Programar IA para recolección de recurso capaz de ver su "entorno"
Publicado por: 3dgeminis en Marzo 08, 2018, 06:43:11 PM
Lo mejor es agrupar todos los objetos que son solidos bajo un mismo objeto parent y hacer referencia a este cuando uses mp_potential_step_object
Título: Re:Programar IA para recolección de recurso capaz de ver su "entorno"
Publicado por: TheJaj en Marzo 08, 2018, 09:18:04 PM
Cita de: 3dgeminis en Marzo 08, 2018, 06:43:11 PM
Lo mejor es agrupar todos los objetos que son solidos bajo un mismo objeto parent y hacer referencia a este cuando uses mp_potential_step_object

xD

El hacer eso no sirve ya que las tienen que entrar en contacto con los edificios para producir recursos y los edificios son parte de esos obstaculos, por lo cual "evita" el edificio o simplemente no se mueve hacia el ya que es un ruta imposible.
Título: Re:Programar IA para recolección de recurso capaz de ver su "entorno"
Publicado por: Clamud en Marzo 10, 2018, 06:35:42 AM
Podrías usar estados, y en cada estado usar diferentes objetos como obstáculos.
Además, si el escenario está hecho sobre una rejilla, puedes utilizar las funciones mp_grid_* que requieren menos procesamiento que las funciones mp_potential_*, pero son más difíciles de configurar.
Título: Re:Programar IA para recolección de recurso capaz de ver su "entorno"
Publicado por: TheJaj en Marzo 10, 2018, 10:59:31 PM
Cita de: Clamud en Marzo 10, 2018, 06:35:42 AM
Podrías usar estados, y en cada estado usar diferentes objetos como obstáculos.
Además, si el escenario está hecho sobre una rejilla, puedes utilizar las funciones mp_grid_* que requieren menos procesamiento que las funciones mp_potential_*, pero son más difíciles de configurar.

Llevo varias horas contemplando tu respuesta y estaría bien si no fuera porque al usar el mp_potential solo se dedica a esquivar un objeto a la vez, por lo cual tendría que usar parets y cada objeto puede ser "hijo" de un solo objeto lo cual no me sirve y con el grid si bien lo estoy usando, el problema es que tendría que crear un grid por cada "peón".

De todas formas creo que voy a usar el grid hasta que encuentre una solución que me convalezca mas.
Título: Re:Programar IA para recolección de recurso capaz de ver su "entorno"
Publicado por: TheJaj en Marzo 10, 2018, 11:42:57 PM
Al final he dejado que el "mp_potential" y he eliminado las variables que establecían el punto en que se detenían, y he cambiado las funciones de contacto con las de proximidad por lo cual cuando va a los edificios especiales queda corriendo al redor del edificio lo cual me hace gracia y por ellos se queda así por ahora. xDD
Título: Re:Programar IA para recolección de recurso capaz de ver su "entorno"
Publicado por: shaoran en Marzo 11, 2018, 04:30:22 AM
Calcula la distancia a la que estas y cuando estes a menos de "x" suspendes el movimiento y haces la accion que tengas que hacer.

Utiliza distance_to_object para poder determinar esa distancia.

Saludos!