Buenas a todos, hace unos días publique un tema para hacer que un objeto haciendo la función de un compañero y disparase a los enemigos, hasta ahí todo bien, funciona a la perfección, el problema ahora es que el "compañero" ese tiene 4 caras y siempre se queda en la misma, probando un poco antes de pediros ayuda he conseguido mas o menos lo que quería pero de mala manera, funcionar funciona, pero mal..

Lo que quiero es que ese compañero cuando dispare, mire hacia donde dispara (para que funcionase bien tendría que ser que mire hacia donde dispara la ultima bala) y no todo el rato hacia la misma posición o que lo haga pero lo haga mal con este código que probé:

if (point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y) >= 0 and point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y) < 45) or (point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y) <= 360 and point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y) > 315)
        {sprite_index = derecha;}
       
        if point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y) < 315 and point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y) > 225
        {sprite_index = abajo;}
       
        if point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y) < 225 and point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y) > 135
        {sprite_index = izquierda;}
       
        if point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y) < 135 and point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y) > 45
        {sprite_index = arriba;}


Aclaro que obj_disparo_intro son los disparos.

Y os dejo el otro tema, por si queréis echarle un ojo:
http://www.comunidadgm.org/preguntas-y-respuestas/atacar-al-mas-cercano/

Un saludo! :)

Viendo el codigo solo tienes 4 direcciones, lo que yo hago es crear una variable que me de esas 4 direcciones y dependiendo de ellla cambio el sprite, ejemplo:
direccion=round (point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y)/90 )
Eso me va a dar 5 valores (0,1,2,3,4)
0 y 4 - derecha
1 - arriba
2 - izquierda
3 - abajo

Cita de: 3dgeminis en Mayo 24, 2015, 09:12:25 PM
Viendo el codigo solo tienes 4 direcciones, lo que yo hago es crear una variable que me de esas 4 direcciones y dependiendo de ellla cambio el sprite, ejemplo:
direccion=round (point_direction(x,y,obj_disparo_intro.x,obj_disparo_intro.y)/90 )
Eso me va a dar 5 valores (0,1,2,3,4)
0 y 4 - derecha
1 - arriba
2 - izquierda
3 - abajo


No he acabado bien bien de entender ese código, y no es exactamente lo que busco, lo que necesito es un código para que un objeto "principal" mire al objeto bala mas cercano o al ultimo objeto bala creado en la room (ya que se disparan muchas balas y el personaje se vuelve loco, y lo que yo busco es que mire donde dispara)

Para saber cuál es el último objeto bala creado se puede usar la función instance_find()

para saber cuál es en ángulo a la bala más cercana, se podría usar point_direction() e instance_nearest().

Cita de: penumbra en Mayo 30, 2015, 08:36:19 PM
Para saber cuál es el último objeto bala creado se puede usar la función instance_find()

para saber cuál es en ángulo a la bala más cercana, se podría usar point_direction() e instance_nearest().

Perdón, que he estado super ocupado.

He estado probando y no hay manera.. entonces, para hacer que cuando un objeto (jugador con 4 sprites) dispare el ultimo objeto "obj_disparo_intro" hacia arriba por ejemplo, el sprite mire hacia arriba y si el ultimo "obj_disparo_intro" creado esta en la izquierda, el sprite mire hacia la izquierda.

Seria necesario un codigo como el que he puesto mas arriba + el codigo que tu dices, que hace que mires al Ultimo objeto (en este caso seria "obj_disparo_intro"). Pero no logro hacer esa combinacion..

Gracias de antemano!

#5 Junio 13, 2015, 09:22:18 PM Ultima modificación: Junio 13, 2015, 09:46:06 PM por penumbra
Lo que te está haciendo falta es usar una variable para guardar la instancia de la bala que se crea al disparar. Esa variable contendrá el id de la última bala disparada, no importa cuántas se hayan disparado antes. Esa variable te servirá para saber a dónde mirar sin tener que usar 4 ifs para preguntar la posición.