Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: dridly en Octubre 31, 2012, 11:21:32 AM

Título: Detectar enemigo en un rango
Publicado por: dridly en Octubre 31, 2012, 11:21:32 AM
Buenas,
estoy haciendo un juego donde se "pelea" por equipos. Tengo el objeto object_player dónde está toda la programación, y con image_angle sé si es de un equipo u otro.

Me gustaría que cuando un player se acerca a un enemigo, a una distancia determinada, le pueda disparar. El problema es que no se como detectar que es un "enemigo", ya que todos son del mismo tipo de objeto.

He probado con collision_rectangle, pero como me devuelve el primer objeto que detecta, si al lado tiene un objeto del mismo equipo me detecta ése, y no un enemigo.

Os adjunto un pequeño ejemplo. Al principio vemos, con los objetos en movimiento, que entre los del mismo equipo no se tocan/detectan y lo hace bien (dibujo una linea en el momento que entra en el rango, que tambien dibujo). Si esperamos un poco a que se vayan estos objetos, en "la segunda oleada" de objetos, vemos que hay dos del mismo equipo que se detectan entre ellos y no detecta el enemigo.

¿Como lo podría hacer? He mirado también con instance_nearest pero me hace lo mismo.

David
Título: Re:Detectar enemigo en un rango
Publicado por: elviskelley en Octubre 31, 2012, 01:19:21 PM
1) var ene;
2) if collision_circle(x,y,128,other,1,0)  then
3) {ene=other.id}
4) if id != ene then
5) {acciones}

Linea 1) declaro variable ene temporal.
linea 2) verifico si existe alguna colision en un radio de 128pxl (puede poner mas)
linea 3) guardo la id de la otra instancia contra la que colisiono
linea 4) verifico si la id de mi instancia no es igual a la del contrario
linea 5) Ya que no tienen la misma id podra atacarlo.
Título: Re:Detectar enemigo en un rango
Publicado por: Crode en Diciembre 27, 2012, 05:04:42 PM
Y no se puede usar otra cosa que no sean id? yo quiero complicarlo un poco mas, si es un enemigo que haga una cosa y si es otro enemigo otra, no se puede usar algo para saber los objetos que estan cerca y actuar en consecuencia? del tipo "si objeto uno esta en un radio de 128 px le sigues y si esta tambien objeto2 pues dejas en paz a objeto y atacas a objeto2"
No se si esto es revivir, pero me interesa el "if collision_circle(x,y,128,other,1,0)  then" asi que lo puse aqui D:
Gracias de antemano ^^
Título: Re:Detectar enemigo en un rango
Publicado por: ThreeBox en Diciembre 28, 2012, 11:49:58 PM
No puedo abrir tu archivo pero te comento la idea.

En el evento step del object_player o en una alarma cada cierto tiempo (recomiendo más lo segundo) el siguiete código.


  target = -1;
  for (i=0; i<instance_count; i+=1) // ciclo que recorre todas las instancias.
  {
    ins = instance_id[i]; // toma una de las instancias.
    if(ins.object_index== object_player && abs(distance_to_object(ins)) <= 40 && ins.image_angle != self.image_angle) //Si esta a cierta distancia, y está en el otro equipo, determina que lo ataques.
           {
            //Aqui queda almacenada la instancia a la que diriges los ataques y sale del ciclo. En vez de esto puedes hacer que cree el ataque y no usas la variable target.
            target = ins;
            i = instance_count;
           }
  }



Espero te haya servido.