Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Como fazer uma i.a de stealth?

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Lolando
Novato
Novato
Reações: 0
Mensagens: 19

Como fazer uma i.a de stealth?

Mensagem por Lolando » Ter Dez 27, 2016 12:03 pm

Eu preciso de uma i.a de stealth para um jogo de plataforma e não faço ideia de como fazer, eu comecei agora e mal sei fazer uma i.a que persegue decente então eu queria pedir ajuda para isto: Eu queria uma i.a que andasse de um lado para o outro e parasse a cada "virada" tipo fazendo uma mini ronda, mas isso eu conssigo fazer, mas o problema é que eu queria que quando ela visse o jogador ela perseguisse e atirasse, queria que a visão dela acabasse na parede e nos blocos de sombra que eu fiz, queria que se o jogador recuasse ela perseguisse ele e caso ele entrasse na sombra ela continuasse seguindo ele mas sua visão diminuía e ela continuaria seguindo até ficar de frente com um bloco de parede, depois que ela voltasse o caminho para a ronda, mas o mais difícil para mim é que eu queria que caso ele visse o jogador e o jogador pulasse ela subisse a mira e a visão(não aprendi fazer a mira girar ainda), tbm queria que se a i.a estivesse olhando para cima/diagonal e o jogador estivesse lá e fosse para a direita ele olhasse totalmente para cima.
Colocando de uma maneira legível
-Queria que ele fizesse uma ronda
-Queria que ele perseguisse e atirasse o jogador caso fosse avistado
-Queria que fora das sombras sua visão colidisse e acabasse em um bloco de sombra
-Queria que caso ele perseguisse o jogador até as sombras e entrasse a range da visão diminuísse
-Queria parar de falar queria e aprender fazer algo direito
-Queria que ele olhasse para cima caso o jogador fugisse para cima
-Queria pedir desculpas  pelo incomodo.

Avatar do usuário
Rodrigo Santiago
Colaborador
Colaborador
Reações: 0
Mensagens: 273

Re: Como fazer uma i.a de stealth?

Mensagem por Rodrigo Santiago » Ter Dez 27, 2016 12:40 pm

Ronda :

Create

Código: Selecionar todos

round_max_dist = 100; //Distancia máxima que defini aqui para o inimigo se mover da posicao inicial
round_side = -1; //Lado para qual ele vai andar
round_move_timer = 0; //Esse timer aqui vou usar para ele se mover
round_stop_timer = 0; //Esse timer vou usar pra ele ficar parado por alguns instantes
Step

Código: Selecionar todos

if (round_move_timer > 0) {
  // Mover
  if (round_side == -1){ 
    //use seus codigos de mover aqui para a esquerda
  } else { 
    //use seus codigos de mover aqui para a direita
  }
  round_move_timer -= 1;
  if (round_move_timer == 0) {      //Quando for 0 ele vai mudar o valor do timer de 'stop'
    round_stop_timer = room_speed * 1; //1 segundo
  }
} 

if (round_stop_timer > 0) {
  round_stop_timer -= 1;
  //Nao mover :-)
  if (round_stop_timer == 0) {      //Quando for 0 ele vai mudar o valor do timer de 'move', e tbm a direcao
    round_move_timer = room_speed * 3; //3 segundos
    round_side = -round_side; // mudando a direcao
  }
}
Avistar e Perseguir

Create

Código: Selecionar todos

target = noone ; //alvo
range = 120; //distancia de visao
Step

Código: Selecionar todos

if (target == noone && instance_number(Jogador) == 1) {
 if ( !collision_line(x,y, Jogador.x, Jogador.y, Blocos, true, true) ) {
   target = Jogador;
 }
}

if (target != noone && instance_exists(target) ) {
  if (point_distance(x,y,target.x,target.y) < range) { //se estiver mais longe q meu range
    target = noone; //o alvo volta a ser nenhum
  }
}

if (target != noone && instance_exists(target) ) {
 // Para o inimigo nao ficar grudado dentro de vc, vou por uma pequena soma de 8 na minha posicao , apenas logico, claro

 if (target.x < x - 8 ) {            //se o alvo estiver com x menor ele está a minha esquerda
    
    //Vamos reaproveitar os codigos ?
    round_side = -1;          //Força esquerda
    round_move_timer = 120;   //Coloca pra andar
    round_stop_timer = 0;     //Não coloca para parar :-)

 } else if (target.x > x + 8) {      //se o alvo estiver com x maior ele está a minha direita
    round_side = -1;           //Força direita
    round_move_timer = 120;    //Coloca pra andar
    round_stop_timer = 0;      //Não coloca para parar :-)

 } else {                            //Nesse caso  aqui ele ta bem pertinho de min (menos de 8 pixels)
    round_move_timer = 0;      //Não Coloca pra andar :-)
    round_stop_timer = 60;     //Coloca para parar
 }
}
Mudar o Range (Nao entendi muito bem, vou por pra ele "ver menos se estiver na sombra"

Step

Código: Selecionar todos

 if (instance_place(x,y,ObjSombra)) { // se colidir com a sombra range menor
  range = 80;
} else {//range maior
  range = 120; 
}

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes