Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Temas - Harushio

1
Que tal! Soy nuevo tanto en GML como en este foro
Queria preguntar unas cuantas dudas, espero puedan ayudarme
Llevo poco menos de 2 semanas intentando programar 1 enemigo, quiero que siga al jugador, ya he intentado con varios codigos y comandos y si lo he logrado pero he tenido problemas con cada uno.
--"Move_toward": Sigue al jugador pero no respeta las colisiones ni el cambio de sprite para las animaciones aun poniendole una condicional con "speed" u "Horizontalspeed"
-- "Pathfinding": Me ha servido bastante pero una vez que sigue al jugador no se detiene aunque despues le ponga "Panth_ends()" (codigo 1)
-- Intente con un codigo de un tutorial el cual tuve que adaptar ya que este era de Game Maker 1, si cumplio su objetivo de seguir al jugador y si esta cerca ejecutar animacion de ataque pero una vez que llega al punto donde se encuentra el jugador o colisiona con otro objeto no vuelve a moverse mas. (Codigo 2)

Estoy utilizando switch states y scripts para todo esto.

Mis dudas son las siguientes:
1.- Si estoy haciendo algun codigo mal o hay algun error que no he visto y si alguno de ustedes podria ayudarme con un codigo que lo solucione o que funcione mejor.
2.- ¿Es posible tener una especie de "Delay" o "Cooldown" entre los cambios de estado? Por ejemplo, que el enemigo siga al jugador durante 5 segundos o cierta cantidad de pasos y despues se quede quieto como a descansar por 5 segundos y despues a perseguir al jugador nuevamente.
3.- De igual forma hacer un "random" (es algo que aun no entiendo del todo bien como funciona, pero busco hacer que el enemigo tome su propia decision a base de aleatoriedad, por ejemplo, que persiga al enemigo, descanse 5 segundo y despues elija si lo atacara o solo pasara por encima o ejecutar otro ataque distinto.

Por cierto el juego que hago es un Top-Down View algo asi como un Beat'Em'Up clasico, les agradezco a todos su ayuda de antemano y perdonen la biblia xd.

Codigo 1

[gml]
target = obj_player;

grid = mp_grid_create(0,0,room_width/32,room_height/32,32,32);
path = path_add();
mp_grid_add_instances(path,obj_collision,1);
mp_grid_path(grid,path,x,y,target.x,target.y,1);
path_start(path,3,0,1);


   if (x == 0 && y == 0)
   {
      sprite_index = spr_enemy_idleL;
   }
   else
   {
      image_speed = 0.8;
      sprite_index = spr_enemy_runL;
   }
   
if (x != 0) && sign(target.x - x) == 1
{
   sprite_index = spr_enemy_runR;
}
if (x != 0) && sign(target.x - x) == -1
{
   sprite_index = spr_enemy_runL;
}
   


if (x == 0 && y == 0) && sign(target.x - x) == 1
{
   sprite_index = spr_enemy_IdleR;
}
if (x == 0 && y == 0) && sign(target.x - x) == -1
{
   sprite_index = spr_enemy_idleL;
}

if distance_to_object(target)
{
path_ends();
state = MONSTERSTATE.FREE;
}
[/gml]

Codigo 2

[gml]
target = obj_player;

if instance_exists(target)
{
   
   if sign(target.y - y) == -1
   {
      keyUp = true;
   }

   if sign(target.y - y) == 1
   {
      keyDown = true;
   }



   if abs(target.x - x) > 35
   {
      if sign(target.x - x) == -1
      {
      keyLeft = true;
      }
      if sign(target.x - x) == 1
      {
      keyRight = true;
      }
   }
}
else
{
   if abs(target.y - y) < 5
   {
      keyAttack = true;
   }
   else
   {
      keyAttack = false;
   }
}



if (keyAttack = true) && sign(target.x - x) == 1
{
   hsp = 0;
   vsp = 0;
   sprite_index = spr_enemy_punchR;
}
if (keyAttack = true) && sign(target.x - x) == -1
{
   hsp = 0;
   vsp = 0;
   sprite_index = spr_enemy_punchL;
}


if (animation_end())
{
   sprite_index = spr_enemy_idleL;
   state = MONSTERSTATE.FREE;
}


[/gml]