Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: cristopher2545 en Octubre 11, 2017, 11:33:04 PM

Título: Proyectil que sigue a varios enemigos a la vez
Publicado por: cristopher2545 en Octubre 11, 2017, 11:33:04 PM
Hey hola a todos! estaba recreando el arma del metal slug llamada "Enemy chasser" ya saben los misiles que siguen a todos los enemigos pero tengo un problema mis enemigos son todos el mismo objeto duplicado así que cuando el misil aparece solo sigue a uno aunque saque varios misiles todos van al primer enemigo que ven solo cuando este muere entonces siguen al siguiente..

tengo este código que va en el objeto misil que detecta al enemigo y lo sigue

var pd =point_direction(x, y, obj_player.x, obj_player.y);

var dd = angle_difference(image_angle, pd);
image_angle -= min(abs(dd), 10) * sign(dd);


   move_towards_point(obj_player.x, obj_player.y, 2);


me gustaría saber como hacerlo agradezco su ayuda de antemano y muchas gracias
Título: Re:Proyectil que sigue a varios enemigos a la vez
Publicado por: bygdle en Octubre 11, 2017, 11:35:50 PM
A varios enemigos... pero ¿a cuáles?
Lo más fácil sería que siguieran al más cercano:
[gml]
var near = instance_nearest(x, y, obj_player); // ¿un enemigo con el nombre de "player"? Vaya, xD.
var pd =point_direction(x, y, near.x, near.y);

var dd = angle_difference(image_angle, pd);
image_angle -= min(abs(dd), 10) * sign(dd);


   move_towards_point(near.x, near.y, 2);
[/gml]
Título: Re:Proyectil que sigue a varios enemigos a la vez
Publicado por: cristopher2545 en Octubre 11, 2017, 11:39:18 PM
es estético XD estaba haciendo pruebas pero ya sabes son los soldaditos tipicos, los tanques el arma sigue a todo enemigo que se le ponga enfrente y como que parece que decide a quien seguir porque al salir tiene un microsegundo para girar eh ir por el enemigo y como en el juego puedes espamear el arma para que saque muchos misiles cuando tienes a varios enemigos cerca no lo veo muy útil jaja si lo bueno de esos juegos es apretar el botón de disparo como un gamo para ver a quien le das


probé el codigo y hace lo mismo escoje a 1 enemigo y todos los 20 misiles que puse se van contra el como si de abuso se tratara

gracias por responder <3
Título: Re:Proyectil que sigue a varios enemigos a la vez
Publicado por: eltantillo en Octubre 13, 2017, 12:57:12 AM
Para esto vas a necesitar llevar un control desde un objeto, por ejemplo en el que los crea. Almacenas los ids y  de esa manera puedes discriminar instancias.
Título: Re:Proyectil que sigue a varios enemigos a la vez
Publicado por: cristopher2545 en Octubre 14, 2017, 10:07:06 PM
mhhh talvez pero realmente lo que quiero que el misil siga a muchas instancias del mismo objeto

gracias por responder <3
Título: Re:Proyectil que sigue a varios enemigos a la vez
Publicado por: bygdle en Octubre 14, 2017, 10:16:46 PM
No había entendido que era una pregunta xDxdXd.
Pues, como dice [user]eltantillo[/user], necesitarás almacenar la id de todos las instancias del mismo objeto en una estructura de datos. Algo así:
[gml]
///Algún evento create de un controlador
globalvar enemigos;
enemigos = ds_list_create();
[/gml]
[gml]
///El evento donde quieras guardas las id.
with(objEnemigo)
{
    ds_list_add(enemigos, id);
}
[/gml]
[gml]
///El evento create del misil
var maxdist = ds_priority_create();
for(var i = 0; i < ds_list_size(enemigos); i++)
{
   var enemigo = enemigos[| i]; //Obtenemos el enemigo en la posición i.
   if(!instance_exists(enemigo)) continue; //Si no existe, saltamos al siguiente.

   var dist = distance_to_object(enemigo);
   ds_priority_add(maxdist, enemigo, dist);
}
near = ds_priority_delete_min(maxdist);

ds_priority_destroy(maxdist);
[/gml]
[gml]
var pd = point_direction(x, y, near.x, near.y);

var dd = angle_difference(image_angle, pd);
image_angle -= min(abs(dd), 10) * sign(dd);

move_towards_point(near.x, near.y, 2);
[/gml]
Así todos seguirán a uno distinto.