segunda-feira, 13 de fevereiro de 2012

[Tutorial] Como fazer a linha de visão inimiga

Olá galera, tudo sussa?

Bom, nesse tutorial eu vou ensinar uma coisa muito útil e bem procurada: A linha de visão do inimigo. Vamos entender como uma variável mágica, a collision_line(x1,y1,x2,y2,obj,prec,notme), funciona, e com ela, faremos nosso inimigo começar a nos caçar apenas quando consegue nos ver.

Vamos lá?

Download do resultado: Clique aqui!

0. Objetivo do tutorial
1. Preparativos
2. Configurando os objetos
3. Testando
4. Considerações finais


0. Objetivo do tutorial:

Criarmos uma linha que liga o jogador e o inimigo e indica a visão do próprio. Se o inimigo ver o jogador, a linha fica vermelha, se não, verde. 
Porém, quando o inimigo parar de ver o jogador, queremos que ele continue procurando por um certo tempo o jogador até desistir, então também programaremos isso.

1. Preparativos

Primeiro, crie os seguintes objetos:

- draw_objeto
- jogador
- inimigo
- parede

Então especifique qualquer sprite para eles. De preferência 32x32 e todas quadradas.

2. Configurando os objetos:

Primeiro, vamos configurar a linha de visão do inimigo. No draw event do draw_objeto, coloque o seguinte código:
if collision_line(self.x,self.y,jogador.x,jogador.y,parede,0,1) //Se o inimigo não está vendo o jogador, ou seja, tem uma parede na frente...
draw_set_color(c_green)//A linha ficará verde
else //Se não...
draw_set_color(c_red) //A linha ficará vermelha. Corre!!

draw_line_width(jogador.x,jogador.y,inimigo.x,inimigo.y,3) //Desenha a linha que liga o jogador e o inimigo
Agora a linha de visão visual do inimigo está completa. Lembre-se que toda a parte de cima, assim como o objeto draw_objeto não serão normalmente necessário em seus jogos. Isso só servirá para você entender como vai funcionar a visão do nosso inimigo.

Agora, vamos programar o nosso inimigo para caçar o nosso herói caso ele o veja. No create event do nosso inimigo, coloque:
seguir =0
E no step event, coloque:
if !collision_line(self.x,self.y,jogador.x,jogador.y,parede,0,1) //Se o inimigo está vendo o jogador...
seguir =150
if seguir >0 //Se ele tiver visto o jogador...
{
seguir -=1
mp_potential_step(jogador.x,jogador.y,3,0) //Ele vai continuar seguindo o jogador até a variável seguir chegar à 0, desviando dos possíveis obstáculos.
}
Dica: Se você quiser adicionar um limite na visão do inimigo de distância, basta colocar if distance_to_object(jogador) <=qualquer_distancia no inicio do código acima.

Agora, no jogador, coloque um sistema de movimentação básico qualquer, apenas para testarmos.

Pronto! Agora tudo está configurado! Vamos ao teste?

3. Testando:

Agora crie uma room e espalhe algumas paredes pelo cenário. Coloque o jogador em uma ponta e o inimigo na outra, porém com obstáculos separando os dois.

Agora vamos ao teste, execute o jogo. Então, entre no campo de visão do inimigo, e quando ele começar a correr atrás de você, tente se esconder e espere ele desistir.

Se tudo deu certo, parabéns! Agora você já sabe como configurar uma visão inimiga!

4. Considerações finais:

Esse foi mais um rápido tutorial de GML. Lembre-se sempre: se for copiar, cite a fonte!

Então, é isso aí, até mais!

Nenhum comentário:

Postar um comentário

Dúvidas? Pergunte!
Ajudou? Agradece!
:]