Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: EnDark2000 en Noviembre 23, 2013, 11:33:06 AM

Título: Como hacer que un npc o mob mire en la dirección que va, no la de un objeto
Publicado por: EnDark2000 en Noviembre 23, 2013, 11:33:06 AM
Hola makeros, tengo algo que preguntaros y es lo siguente:
¿Como hago para que un enemigo mire en la dirección que vaya? No quiero que mire en la dirección de mi personaje porque
si lo esta persiguiendo y el personaje gira y se esconde detrás de una pared, el enemigo no puede seguir mirandole al personaje, tiene que mirar recto hacia donde va y cuando le toque girar también, se gire el en la dirección corespondiente.
Gracias de antemano y me despido
Salu2

PD: Por que nadie me hace caso? D:
Título: Re:Como hacer que un npc o mob mire en la dirección que va, no la de un objeto
Publicado por: EnDark2000 en Noviembre 27, 2013, 04:39:32 PM
Nadie sabe? esto lleva casi 1 semana aquí :(
Título: Re:Como hacer que un npc o mob mire en la dirección que va, no la de un objeto
Publicado por: Iros en Noviembre 27, 2013, 06:09:59 PM
Antes que nada, para poder contestar correctamente tu pregunta necesitaríamos saber el código de IA que tiene el NPC y ver como actúa tu NPC, después de eso es cuestión de tocar un poco el código hasta que quede funcionando que no creo que sea tan complicado.
Título: Re:Como hacer que un npc o mob mire en la dirección que va, no la de un objeto
Publicado por: Ulises en Noviembre 27, 2013, 06:25:23 PM
No entiendo bien la pregunta, ¿quieres que siempre mire el enemigo a tu personaje y cuando haya algo de por medio no?
si este es tu caso, podrías almacenar la posición de ambos y que el enemigo gire en la dirección en la que tu personaje se encuentra
esto en el enemigo (step):

var dd;
global.Player_x = personaje.x
global.Player_y=  personaje.y
//comprobamos si entre el enemigo y el personaje (player) existe algo, como una pared, que tendras que especificar en "obj_solid"
if  collision_line( x, y, global.Player_x, global.Player_y, obj_solid, false, false )
{
go = false
}
else {go = true}
//con esto compruebas si puedes ir (if go = true) pues te mueves hacia el enemigo y te giras...
if go
{
move_towards_point(global.Player_x, global.Player_y, speed);
//con esto gira hacia donde este tu personaje
dd = ((((point_direction(x, y, global.Player_x, global.Player_y) - image_angle) mod 360) + 540) mod 360) - 180;
image_angle += min(abs(dd), 5) * sign(dd);
}

Título: Re:Como hacer que un npc o mob mire en la dirección que va, no la de un objeto
Publicado por: EnDark2000 en Noviembre 28, 2013, 05:56:41 PM
Bueno mas o menos necesito lo que ha dicho ulises pero que si hay algo de por medio, no es que no mire al personaje si no que mire en la dirección que va. este es mi código que encima va un poco mal :(
CREATE
image_angle=random(360)
pasear=0;//crea la variable pasear
atacar=0;//crea la variable atacar
xmove=xstart;// el lugar a donde debe  es hacia la posicion del comienzo
ymove=ystart;//el lugar a donde debe  es hacia la posicion del comienzo
move=true; // se puede mover
image_single=1;//seteamos que el sprite del objeto
               //sea la pirmer imagen de la animación
               
               r1=0;
               r2=0;


ALARM 0
atacar = false;

STEP
///IA
//MANEJO DE SPRITE
image_angle=direction //la imagen rota conforme a la direcion del objeto
//AI
//ATACAR
if instance_number(obj_Player)=0 //si no existe jugador
    {
        atacar=false        //atacar es falso
    }   
if instance_number(obj_Player)>0//si hay por lo menos un jugador
    {
        if (distance_to_object(obj_Player)<700 //si la distancia al jugador es menor a 700
        and !(collision_line(x,y,obj_Player.x,obj_Player.y,obj_wall,true,true))
        and point_direction(x,y,obj_Player.x,obj_Player.y)>direction-45 // y la direction hacia el jugador esta entre los
        and point_direction(x,y,obj_Player.x,obj_Player.y)<direction+45)// 90° del angulo de vision
        or distance_to_object(obj_Player)<50 // ó si esta muy cerca
        and !(collision_line(x,y,obj_Player.x,obj_Player.y,obj_wall,true,true))
        then
        {
                atacar=true //tiene que ataca
                pasear=false //debe dejar de estar paseando por el mapa
              }
              else //de lo contrario
              {
                if (distance_to_object(obj_Player)>700)or(collision_line(x,y,obj_Player.x,obj_Player.y,obj_wall,true,true)) //si la distancia hacia el jugador es mayor a 200
                alarm[0]=60;                      //debe dejar de atacar
              }
}
if atacar=true //si atacar es verdadero
{
move_towards_point(obj_Player.x+r1,obj_Player.y+r2,1);//debe moverse hacia el jugador.
}

//PASEAR
if  atacar=false //si no esta atacando
    {pasear=true}//puede pasearse por el mapa
if pasear=true //si pasearse es verdadero
    {
        if (xmove<x+1) and (xmove>x-1) and (ymove>y-1) and (ymove<y+1) and move=true //si esta hacia donde debería moverse y se puede mover
        {
        xmove=round(xstart+random(40)+random(23)) //a donde debe moverse es X un lugar aleatorio
        ymove=round(ystart+random(40)+random(23)) //a donde debe moverse es Y un lugar aleatorio
        move=false // se desactiva mover
        speed=0
        }
        if round(random(60))=60 and move=false // si de la posibilidad se da de 1 en 60
        {
        move=true //puede moverse
        }
    }
if pasear=true and move=true //si pasear esta activada y se puede mover
    {
        move_towards_point(xmove,ymove,1.5);//debe moverse hacia la variables xmove e ymove.
    }


COLISION CON EL OBJETO BALA (obj_bullet_P)
atacar = true;
pasear = false;
alarm[0]= 60;



objetos que interactuan con el enemigo son los siguentes:
obj_bullet_P Bala del jugador
obj_Player Jugador
obj_wall Muro

Espero que sepan como ayudarme y lo mas importante es que me expliquen en funcionamiento del código para así aprender yo, y los que visiten este post :)
Título: Re:Como hacer que un npc o mob mire en la dirección que va, no la de un objeto
Publicado por: blackhack2000 en Noviembre 30, 2013, 07:51:48 PM
No echen ahi los codigos completos, solo hace falta al evento "Step" añadirle el codigo:
image_angle=direction
{el angulo de la imagen es igual a la direccion, o en otras palabras, voltea a done vá.}

si tu juego es de vista isometrica, bastara con unos if's :3
Título: Re:Como hacer que un npc o mob mire en la dirección que va, no la de un objeto
Publicado por: EnDark2000 en Diciembre 01, 2013, 03:58:55 PM
lo que pasa es que la direction es donde esta el objeto obj_player :/. Traté de hacer que si hay algo de por medio no siga viendo al personaje pero queda muy feo y raro ya que va en una dirección pero mira algo inclinado a donde estaba el personaje antes... no consigo hacer el código bien :(