Autor Tema: Proyectil que sigue a varios enemigos a la vez  (Leído 128 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cristopher2545

Proyectil que sigue a varios enemigos a la vez
« 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

Código: [Seleccionar]
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


Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!
 
No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado NiuWeb

Re:Proyectil que sigue a varios enemigos a la vez
« Respuesta #1 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:
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);
BA: RTFM and STFW



 


Desconectado cristopher2545

Re:Proyectil que sigue a varios enemigos a la vez
« Respuesta #2 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
« última modificación: Octubre 11, 2017, 11:54:25 pm por cristopher2545 »
Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!
 

Desconectado eltantillo

  • Habitual
  • *
  • Puntos: 1
  • Mensajes: 25
  • Sexo: Masculino
    • Ver Perfil
    • David Morales: Programador de juegos indie
Re:Proyectil que sigue a varios enemigos a la vez
« Respuesta #3 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.
 

Desconectado cristopher2545

Re:Proyectil que sigue a varios enemigos a la vez
« Respuesta #4 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
Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!
 

Desconectado NiuWeb

Re:Proyectil que sigue a varios enemigos a la vez
« Respuesta #5 en: Octubre 14, 2017, 10:16:46 pm »
No había entendido que era una pregunta xDxdXd.
Pues, como dice @eltantillo
                 
       
Sexo: Masculino Mensajes: 25
Age: 28 Ubicación: Mas cerca de lo que crees

 
, necesitarás almacenar la id de todos las instancias del mismo objeto en una estructura de datos. Algo así:
///Algún evento create de un controlador
globalvar enemigos;
enemigos = ds_list_create();
///El evento donde quieras guardas las id.
with(objEnemigo)
{
    ds_list_add(enemigos, id);
}
///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);
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);
Así todos seguirán a uno distinto.
« última modificación: Octubre 14, 2017, 10:34:34 pm por NiuWeb »
BA: RTFM and STFW