Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: GALO en Julio 02, 2013, 05:17:44 AM

Título: Prioridad de enemigo en juego top down [SOLUCIONADO]
Publicado por: GALO en Julio 02, 2013, 05:17:44 AM
Hola a todos.

El asunto es que después de crear un código para una torreta automática, en el cual está elige su objetivo por proximidad, surgió el problema de que si el enemigo mas cercano esta detrás de un muro, solo se fija en esté y no en el otro enemigo que esta descubierto (no lo toma como amenaza ya que esta mas lejos que el primero. ).

Quería saber si alguien conoce una forma de hacer que la torreta tome en cuenta los enemigos expuestos, aun que esten mas lejos y no los que estan a cubierto o detrás de un muro (el código que empleo se basa en collision_line y instance_nearest).

muchas gracias por su tiempo  :)
Título: Re:Prioridad de enemigo en juego top down
Publicado por: knd144 en Julio 02, 2013, 06:56:43 PM
Pues en este caso instance_nearest() no te será de mucha utilidad... necesitas checar todos los objetos enemigos y ver cuál es el más apto.
Fenris78 hizo algo parecido, sólo que él en lugar de checar el más cercano posible, checó el más cercano dentro de un rango de visión; es sólo cuestión de que modifiques eso último (la condición dentro de los bucles for).

http://www.comunidadgm.org/index.php?topic=9090.0 (http://www.comunidadgm.org/index.php?topic=9090.0)
Título: Re:Prioridad de enemigo en juego top down
Publicado por: brunoxzx en Julio 03, 2013, 08:08:32 AM
Te hice una pequeña modificacion de este script (http://www.gmlscripts.com/script/instance_nth_nearest)  que se adapta a lo que quieres.
[gml]
var pointx,pointy,object,n,list,nearest;
    pointx = argument0;
    pointy = argument1;
    object = argument2;
    list = ds_priority_create();
    nearest = noone;
    with (object) ds_priority_add(list,id,distance_to_point(pointx,pointy));
    do {
           nearest = ds_priority_delete_min(list);
    }while(collision_line(pointx, pointy, nearest.x, nearest.y, PARIENTE_MURO, false, true) && !ds_priority_empty(list));
    ds_priority_destroy(list);
    return nearest;
[/gml]

Lo usas así instance_nearest_line(x,y,obj);
Título: Re:Prioridad de enemigo en juego top down
Publicado por: GALO en Julio 04, 2013, 12:02:33 AM
Vaya, no había visto este script de Fenris78  :-[ , gracias knd144.

Brunoxzx , tenia problemas para adaptarlo muchas gracias a ti también, han resuelto mi duda  ;)