Página 1 de 1
Problemas na movimentação do inimigo
Enviado: Qui Mai 07, 2020 6:07 pm
por Santana
Escrevi o código do inimigo, mas quando roda o jogo ele não se move, apenas quando o player da dano nele, mas mesmo assim é aleatório, as vezes quando morre ele faz a animação de morte, mas no final ele volta e fica andando, quando não é isso, ele anda mas fica intangível. E pra completar, quando bate na parede ele não volta, só fica parado.
SPOILER: Clique para ver o conteúdo
Código: Selecionar todos
#region STATE MACHINE
switch(estado)
{
#region PARADO
case "parado":
{
velh = 0;
timer_estado ++;
if (sprite_index != fantasma)
{
image_index = 0;
}
sprite_index = fantasma;
//Condição de troca
if (position_meeting(mouse_x, mouse_y, self))
{
if (mouse_check_button_pressed(mb_right))
{
estado = "hit";
}
}
//Estado de parulha
if(irandom(timer_estado) > 300)
{
estado = choose("walk", "walk" , "parado");
timer_estado = 0;
}
break;
}
#endregion
#region ANDANDO
case "walk":
{
timer_estado ++;
if (sprite_index != fantasma)
{
image_index = 0;
velh = choose(1, -1);
}
sprite_index = fantasma;
//caondição de saída do estado
if (irandom(timer_estado) > 300)
{
estado = choose("parado", "parado", "walk");
timer_estado = 0;
}
break;
}
#endregion
#region ATAQUE
case "attack":
{
if(sprite_index != f_ataque)
{
image_index = 0;
}
sprite_index = f_ataque;
if distance_to_object(Player) < 1
{
estado = "attack";
}
//saindo do estado
if (image_index > image_number - 1)
{
estado = "parado";
}
break;
}
#endregion
#region HIT
case "hit":
{
if (sprite_index != hit_f)
{
//iniciando o que for preciso para este estado
image_index = 0;
}
sprite_index = hit_f;
//Condição saída de estado
if(image_index > image_number -1)
{
//Checando vida
if (vida_atual > 0)
{
estado = "parado";
}else if (vida_atual <= 0)
{
estado = "dead";
}
}
break;
}
#endregion
#region MORTE
case "dead":
{
if (sprite_index != f_morte)
{
//iniciando o que for preciso para este estado
image_index = 0;
}
sprite_index = f_morte
//morrendo de verdade
if (image_index > image_number - 1)
{
instance_destroy();
}
}
}
#endregion
#endregion
Re: Problemas na movimentação do inimigo
Enviado: Sex Mai 08, 2020 2:25 pm
por Rodrigo_GM
Olá, olhei aqui e vi alguns erros, talvez isso seja o problema.
O primeiro é que vc não declarou um sprite diferente para o case "walk", por causa disso ele n acrescentar nada a variável "velh", ai o objeto fica parado.
O Segundo erro é em.
Código: Selecionar todos
if(image_index > image_number -1)
{ //ação que vc quer }
O correto deveria ser, checar se o "image_index" está com o mesmo valor que "image_number -1", não com um valor maior.
Tambem percebi que vc não definiu um local para chama o "case "attack" " Você pode colocar assim no case "parado" ou no "walk" .
Código: Selecionar todos
//checando se o play esta proximo
if distance_to_object(obj_player) < 64
{
if x < obj_player.x {velh=1;} else { if x > obj_player.x{velh=-1} }
if distance_to_object(obj_player) < 1 {velh=0; estado = "attack";}
}
A respeito da colisão com objeto, vc só precisar define para mudar a variável "velh" quando uma colisão for verdadeira, tipo assim.
Código: Selecionar todos
if hspeed<0 // esqueda
{
image_xscale=-1; // inverte a imagem.
if collision_line(x-16,y,x-32-hspeed,y,obj_casa,0,0) // colisão por linha
{velh=1;}
}else
{
if hspeed>0// direita
{
image_xscale=1;
if collision_line(x+16,y,x+32+hspeed,y,obj_casa,0,0) // colisão por linha
{velh=-1;}
}
}
Lembrando que o "Obj_casa" no código acima é somente um exemplo, troque pelo objeto que for seu obstaculo.
Re: Problemas na movimentação do inimigo
Enviado: Ter Mai 19, 2020 4:08 pm
por Santana
Fiz isso, mas agora o inimigo fica escolhendo pra onde ir o tempo todo, então ele não sai do lugar. Já no ataque eu quero que ele faça a animação e pare no ultimo frame, como faz isso? Do que tentei ele fazia 3 vezes a animação e voltava a andar