Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: zHeMaa en Mayo 23, 2015, 09:09:01 PM

Título: Atacar al mas cercano
Publicado por: zHeMaa en Mayo 23, 2015, 09:09:01 PM
Buenas a todos, acabo de crear un personaje npc (un compañero) que lo que quiero es que ataque a los enemigos cercanos, o mejor dicho.. al mas cercano, por ejemplo si vienen 5 que ataque primero al mas cercano y así sucesivamente hasta el ultimo, que seria el mas lejano.

No se que código usar exactamente.. ni como plantearlo, supongo que seria un "distance_to_object" pero como os digo.. he buscado información sobre el código y no se como plantearlo para que funcione 100%.

Gracias de antemano!

Edito: Después del código que funcione ira el código de instance_create y la bala, que no lo había dicho.
Título: Re:Atacar al mas cercano
Publicado por: penumbra en Mayo 23, 2015, 09:19:48 PM
1. Si hay distintos objetos enemigos, agruparlos todos bajo un mismo parent. Si sólo hay un objeto enemigo, esto no es necesario

2. Crear algunas variables en el player.
[gml]
id_objetivo = noone
atacar = false
[/gml]

3 Decidir si se debe atacar y elegir enemigo a atacar [STEP]
[gml]
if instance_exists(obj_padre_enemigo) and (!atacar)
{
     id_objetivo = instance_nearest(x, y, obj_padre_enemigo)
     atacar = true
}

if (atacar) and (instance_exists(id_objetivo) )
{
      //Rutinas para atacar, esto ya depende de lo que quieras hacer
     //Aquí hay que usar la variable id_objetivo que indica a qué instancia se debe atacar
}
[/gml]
Evento destroy de obj_padre_enemigo
[gml]
obj_player.id_objetivo = noone
obj_player.atacar = false
[/gml]
Título: Re:Atacar al mas cercano
Publicado por: king195 en Mayo 23, 2015, 10:10:51 PM
Para responderte necesitamos un poco más de info sobre de que va el juego, por ejemplo controlas al personaje? o se mueve automaticamente igual que los enemigos?
Título: Re:Atacar al mas cercano
Publicado por: zHeMaa en Mayo 24, 2015, 02:54:27 AM
Cita de: penumbra en Mayo 23, 2015, 09:19:48 PM
1. Si hay distintos objetos enemigos, agruparlos todos bajo un mismo parent. Si sólo hay un objeto enemigo, esto no es necesario

2. Crear algunas variables en el player.
[gml]
id_objetivo = noone
atacar = false
[/gml]

3 Decidir si se debe atacar y elegir enemigo a atacar [STEP]
[gml]
if instance_exists(obj_padre_enemigo) and (!atacar)
{
     id_objetivo = instance_nearest(x, y, obj_padre_enemigo)
     atacar = true
}

if (atacar) and (instance_exists(id_objetivo) )
{
      //Rutinas para atacar, esto ya depende de lo que quieras hacer
     //Aquí hay que usar la variable id_objetivo que indica a qué instancia se debe atacar
}
[/gml]
Evento destroy de obj_padre_enemigo
[gml]
obj_player.id_objetivo = noone
obj_player.atacar = false
[/gml]

Funciona a la perfección! Gracias! :)
Título: Re:Atacar al mas cercano
Publicado por: Reyko500 en Enero 17, 2018, 12:12:34 AM
como puedo aplicar ese codigo,,, no entiendo como va