Buenas, bueno, todavía sigo haciendo mi Tower Defense poco a poco y ahora mismo estoy atascado con el tema del ataque de las torres (después de solucionar una serie de bugs con otras cosas).

El tema es que quiero que la torre detecte si un enemigo está a tiro para empezar a atacarle. Nunca he hecho nada que tenga que ver con ataques a distancia (disparos) ni nada parecido, así que no sé ni por donde empezar, espero que podáis echarme una mano, gracias ^^

Buenas, pues tienes varias opciones, dependiendo del tipo de ataque que tenga la torre.

Collision_circle,  collision_line_ y alguna mas. Le pones hasta que distancia quieres que detecten al enemigo. Mirate en el manual. Yo uso mucho collision _line, porque mis ataques son lineales, hacia una dirección sola, y hago que busque enemigos en esa dirección. Van por pixeles para calcular la distancia.

¿Y como se haría lo del disparo? Ya digo que no he hecho nunca esto xD

Este sería el código:

w=instance_create(x,y,Disparo)
w.direction=direction

yo soy noob en gml, pero creo q podrias ponerle:

if distance_to_object(enemigo)<100 and alarm[0]=0 then instance_create(objetoBalaDeLaTorre,x,y) alarm[0]=50;
eso en step de la torre

alarm[0]=0;
eso en create de la torre

el 100 del primer codigo es de ejemplo, pon el que quieras
Como dije, tengo MUY poca experiencia en gml, pero creo q te podria servir. Suerte  ;)
HarpaX7

#5 Febrero 06, 2015, 04:15:38 AM Ultima modificación: Febrero 06, 2015, 05:58:07 AM por Loncha
Gracias a todos, voy a probar y editaré el post ^^

EDITADO:

Ya he conseguido que varias cosas funcionen, que detecte al enemigo y que dispare, el tema es que no consigo que el disparo vaya hacia el enemigo, como mucho he conseguido que se mueva en la misma dirección (izquierda, derecha, arriba o abajo), seguramente lo que me falte será una tontería, a ver si podéis decirme como va eso y terminamos con esto ya x)

cambia todo eso de arriba por este codigo:

va en el evento de alarm[0]=0


if !instance_exists(ENEMIGO)
{
  objetivo = instance_nearest(x,y,ENEMIGO); //Sí no ha seleccionado un objetivo o ya lo ha destruído, seleccionar otro objetivo
}
if instance_nearest(x,y,pariente_seguir) != ENEMIGO
{
  objetivo = instance_nearest(x,y,ENEMIGO); //Si hay un enemigo más cerca que el objetivo, cambiar el objetivo al más cercano
}

if distance_to_object(ENEMIGO) < 60
{
  with instance_create(x,y,BALA)
   {
    speed = 15;
    direction = point_direction(other.x,other.y,other.objetivo.x,other.objetivo.y);  //Sí el objetivo está cerca, disparar la bala
   }
}
alarm[0] = 30; //repetir la alarma




con eso tu torre disparara al enemigo  y a su vez la bala se dirigira al enemigo sin problemas..
Reyko500