Un enemigo estatico que dispare en tres direcciones diferentes, he tratado de hacerlo y no puedo :'(
Las coordenadas de los disparos serian 230,270 y 310. Intente hacerlo pero dispara de todas las direcciones a la vez, y quiero que dispare individualmente dependiendo de la posicion del jugador, y que al disparar en cada posicion cambie a su Sprite respectivo
De ante mano muchas gracias
Cita de: evansmako123 en Octubre 30, 2015, 11:24:33 PM
Las coordenadas de los disparos serian 230,270 y 310.
Esto no resulta claro, ya que para definir un punto siempre se necesitan un PAR de coordenadas: un valor para x y otro para y. Supongo que quizás estás refiriéndote al ángulo en el que debe disparar el enemigo.
No es necesario cambiar de sprite por cada dirección/ángulo. Un único sprite de disparo se puede girar para apuntar a la posición deseada, pero esto también depende de cómo quieres que se vea el sprite.
GM ya posee variables para definir una dirección de movimiento, así que símplemente tienes que usar algo como esto:
[gml]
var bala;
bala = instance_create(blah blah, pasar argumentos)
randomize()
bala.speed = 10
bala.direction = choose(230, 270, 310) //Elegir dirección del disparo al azar, de entre tres posibilidades
obj_enemigo.image_angle = 310 //Esto gira al sprite del enemigo para que coincida con la dirección de la bala. Si el código se coloca en el objeto enemigo, entonces borrar "obj_enemigo."
[/gml]
dependiendo de dónde esté el player...
create:
disparo = false;
alarm[0] = 1*room_speed; //1 = 1 segundo xD
step:
dir = point_direction(x,y,obj_player.x,obj_player.y); //edita obj_player como debe ser xD
if dir > 180 and dir <= 255
direction = 230;
else if dir > 255 and dir <= 295
direction = 270;
else if dir > 295 and dir <= 360
direction = 310;
image_angle = direction;
He supuesto que esas "coordenadas" te refieres a 3 direcciones estáticas para tu "torreta" o lo que sea, y me basé en esos datos para hacer áreas de ángulo en donde se situa el player para decirle cuál de esas 3 direcciones estáticas apuntará la torreta en cada caso, piensa que va por image_angle, si por casualidad tienes las direcciones con 3 frames en el sprite, tendrías que cambiarlo a uno solo apuntando a la derecha (ángulo 0)
dir es una variable para ver a qué angulo está el player y así poder comparar con su propia dirección y tal xD
alarm0:
if dir > 180 and dir <= 360
{
bala.instance_create(x,y,obj_bala); //edita obj_bala como debe ser.. xD
bala.speed = 5; //velocidad, a gusto :B
bala.direction = direction;
bala.image_angle = direction;
alarm[0] = 1*room_speed; //1 segundo como antes, a gusto :B
}
else
{
alarm[0] = 1*room_speed; //de nuevo 1 segundo, este "else" es porque, si el player no está en ninguna de las "areas de visión" de la torreta, pues esta simplemente no dispara, pero seguimos haciendo bucle en la alarm, claro :B
}
No sé si será lo que buscas, pero bueno, lo he intentado, piensa sobretodo, que no le puse ningún girosuavizado ni nada así, la torreta apuntará en una de esas 3 direcciones y cuando cambia da un salto, osea se pone apuntando derrepente en la dirección que le toca, no se rota así to despacico y bonito eeh xD
Cita de: kostra en Octubre 31, 2015, 12:04:38 PM
dependiendo de dónde esté el player...
create:
disparo = false;
alarm[0] = 1*room_speed; //1 = 1 segundo xD
step:
dir = point_direction(x,y,obj_player.x,obj_player.y); //edita obj_player como debe ser xD
if dir > 180 and dir <= 255
direction = 230;
else if dir > 255 and dir <= 295
direction = 270;
else if dir > 295 and dir <= 360
direction = 310;
image_angle = direction;
He supuesto que esas "coordenadas" te refieres a 3 direcciones estáticas para tu "torreta" o lo que sea, y me basé en esos datos para hacer áreas de ángulo en donde se situa el player para decirle cuál de esas 3 direcciones estáticas apuntará la torreta en cada caso, piensa que va por image_angle, si por casualidad tienes las direcciones con 3 frames en el sprite, tendrías que cambiarlo a uno solo apuntando a la derecha (ángulo 0)
dir es una variable para ver a qué angulo está el player y así poder comparar con su propia dirección y tal xD
alarm0:
if dir > 180 and dir <= 360
{
bala.instance_create(x,y,obj_bala); //edita obj_bala como debe ser.. xD
bala.speed = 5; //velocidad, a gusto :B
bala.direction = direction;
bala.image_angle = direction;
alarm[0] = 1*room_speed; //1 segundo como antes, a gusto :B
}
else
{
alarm[0] = 1*room_speed; //de nuevo 1 segundo, este "else" es porque, si el player no está en ninguna de las "areas de visión" de la torreta, pues esta simplemente no dispara, pero seguimos haciendo bucle en la alarm, claro :B
}
No sé si será lo que buscas, pero bueno, lo he intentado, piensa sobretodo, que no le puse ningún girosuavizado ni nada así, la torreta apuntará en una de esas 3 direcciones y cuando cambia da un salto, osea se pone apuntando derrepente en la dirección que le toca, no se rota así to despacico y bonito eeh xD
Para que quede un claro, el enemigo como tal no es una torreta :3 es este, por ende no quiero que rote o algo asi ;w; simplemente que el sprite cambie
pues en esta parte:
if dir > 180 and dir <= 255
direction = 230;
else if dir > 255 and dir <= 295
direction = 270;
else if dir > 295 and dir <= 360
direction = 310;
cambia los "direction" por image_index = 0,1,2... nada más, bueno, image_speed = 0; en el create xD
Cita de: kostra en Octubre 31, 2015, 07:36:32 PM
pues en esta parte:
if dir > 180 and dir <= 255
direction = 230;
else if dir > 255 and dir <= 295
direction = 270;
else if dir > 295 and dir <= 360
direction = 310;
cambia los "direction" por image_index = 0,1,2... nada más, bueno, image_speed = 0; en el create xD
T-T Mira, despues de hacer esto fijo me pongo a ver tutoriales hasta el 2020
En la línea 3 estás escribiendo
[gml]bala.instance_create()[/gml]
pero debería ser
[gml]bala = instance_create()[/gml]
culpa mia!! sry! :B