Obrigado por visitar a The Game Makers Brasil |
Como fazer uma i.a de stealth?
Como fazer uma i.a de stealth?
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.
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.
- Rodrigo Santiago
- Colaborador
- Reações: 0
- Mensagens: 273
-
Re: Como fazer uma i.a de stealth?
Ronda :
Create
Step
Avistar e Perseguir
Create
Step
Mudar o Range (Nao entendi muito bem, vou por pra ele "ver menos se estiver na sombra"
Step
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
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
}
}
Create
Código: Selecionar todos
target = noone ; //alvo
range = 120; //distancia de visao
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
}
}
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;
}
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes