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.

Percepção do Inimigo (Jogo de Ação)

Tutoriais, videoaulas, guias e downloads para te ajudar nos estudos.
Avatar do usuário
Tutoriais & Aulas
Colaborador
Colaborador
Reações: 0
Mensagens: 110

Percepção do Inimigo (Jogo de Ação)

Mensagem por Tutoriais & Aulas » Qui Abr 28, 2016 9:15 pm

Autor original: Gonçalves
Percepção do Inimigo

Este tutorial aborda como:

- Fazer o personagem andar e mudar de sprite dependendo de sua posição (Opcional)
- Fazer o inimigo correr atrás do personagem caso ele se aproxime
- Parar de perseguí-lo se atingir uma boa distância

Fazer o personagem andar e mudar de sprite dependendo de sua posição (Opcional)


Bom, iniciamos o tutorial com algo que, como não é o foco principal do que falarei hoje, deixei como opcional. Não ensinarei como fazer sprites de personagens (Até porque eu não sei :P ), então usarei quadrados, um azul para o personagem, e um vermelho para os inimigos, mas cada um terá um sprite diferente para cada posição.

Agora crie um objeto do char, nomeie-o como quiser. No evento Create, crie um Execute Code, agora ponhamos nele o seguinte:

Código: Selecionar todos

velocidade = 5
Isso vai determinar com qual velocidade o personagem se moverá.

Agora no Step devemos criar outro Execute Code e colocar os seguintes códigos:

Código: Selecionar todos

if keyboard_check(vk_right){sprite_index=direita if place_free(x+velocidade,y){x+=velocidade}}
Aqui checamos se a tecla direita foi pressionada, se sim, o sprite do personagem muda para o sprite direita (Se caso botou um nome diferente referente à direita, ponha-o aqui), depois checamos se na posição x+4 (à direita do char) está livre, se sim, x do herói é adicionado à var velocidade (Que definimos no Create).

Código: Selecionar todos

if keyboard_check(vk_left){sprite_index=esquerda if place_free(x-velocidade,y){x-=velocidade}}
Aqui quase a mesma coisa, só que invertemos os sinais, e o sprite_index passa a ser o da esquerda.

Código: Selecionar todos

if keyboard_check(vk_up){sprite_index=cima if place_free(x,y-velocidade){y-=velocidade}}
if keyboard_check(vk_down){sprite_index=baixo if place_free(x,y+velocidade){y+=velocidade}}
Agora fazemos quase o mesmo novamente, só que para baixo e para cima.

Resultado:

Seu personagem já anda quando uma tecla direcional é pressionada.

Fazer o inimigo correr atrás do personagem caso ele se aproxime


Crie o objeto do inimigo, faça a movimentação inicial como quiser. Agora vem uma parte simples, mas demorei um pouco para descobrir como fazer isso, talvez de primeira não entendam... o raio de visão. No Create do inimigo, crie um Execute Code, e ponha nele isso:

Código: Selecionar todos

velocidade = 3
raio_de_visao = 120 // Você vai entender pra quê isso servirá quando ler abaixo
distancia_x = x - char.x
distancia_y = y - char.y
if distancia_x < 0 {distancia_x *= -1}
if distancia_y < 0 {distancia_y *= -1}
O que fizemos? Apenas definimos as variáveis distancia_x e distancia_y como x - char.x, que é o seguinte, a posição x do inimigo é 300, e do char 150, logo raio_x = 300 - 150, que tem como resultado 150, se a posição x do char fosse 250, o resultado seria 50, logo temos uma var para definir a distância entre eles. Se fosse o contrário, o inimigo estivesse no x 150 e o char no 300, o resultado seria -150, para isso a condição abaixo, se distancia_x < 0, multiplica por -1. a var raio_de_visao será usado para saber de quanto poderá ser essa diferença.

Agora no Step, repita o que colocou no Create (Mas não precisa redefinir a var raio_de_visao, só tirar do código), e mais embaixo isso:

Código: Selecionar todos

if distancia_x < raio_de_visao && distancia_y < raio_de_visao
{mp_potential_step_object(char.x,char.y,velocidade,objeto)}
Agora checamos se as vars de distância são menores que o raio de visão do inimigo, se sim, ele irá atrás do char, desviano do objeto objeto (pode-se mudar pelo nome da parede), é apropriado colocar um parent de todos os objetos não-passáveis.

Agora na colisão do Inimigo com o char, ponha Bonce against solid objects ou crie um código e ponha nele:

Código: Selecionar todos

speed = 0
Para parar o objeto.

Você pode encaixá-lo em uma engine de HP, mas talvez eu poste aqui como criar HP, barra de HP para char e inimigos e como atacar e receber dano deles.

Créditos:
matheus.reis

Avatar do usuário
Ark
Membro
Membro
Reações: 0
Mensagens: 39
Localização: Rio de Janeiro

Re: Percepção do Inimigo (Jogo de Ação)

Mensagem por Ark » Sex Jun 24, 2016 8:31 pm

Muito bom o tutorial, vou dar uma olhada agora !

Responder

Quem está online

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