Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: evansmako123 en Octubre 30, 2015, 11:24:33 PM

Título: Enemigo estatico dispare en tres direcciones diferentes
Publicado por: evansmako123 en Octubre 30, 2015, 11:24:33 PM
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
Título: Re:Enemigo estatico dispare en tres direcciones diferentes
Publicado por: penumbra en Octubre 30, 2015, 11:42:36 PM
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]

Título: Re:Enemigo estatico dispare en tres direcciones diferentes
Publicado por: 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
Título: Re:Enemigo estatico dispare en tres direcciones diferentes
Publicado por: evansmako123 en Octubre 31, 2015, 07:16:54 PM
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
Título: Re:Enemigo estatico dispare en tres direcciones diferentes
Publicado por: 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ítulo: Re:Enemigo estatico dispare en tres direcciones diferentes
Publicado por: evansmako123 en Noviembre 01, 2015, 03:29:43 AM
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
Título: Re:Enemigo estatico dispare en tres direcciones diferentes
Publicado por: penumbra en Noviembre 01, 2015, 05:57:52 AM
En la línea 3 estás escribiendo
[gml]bala.instance_create()[/gml]
pero debería ser
[gml]bala = instance_create()[/gml]
Título: Re:Enemigo estatico dispare en tres direcciones diferentes
Publicado por: kostra en Noviembre 01, 2015, 12:44:44 PM
culpa mia!! sry! :B