Pular para o conteúdo
Jogos Digitais
Nesta página
  1. Objetivos de aprendizagem
  2. Pré-requisitos
  3. Materiais
  4. Conceitos
  5. Exemplos
  6. Tutorial passo a passo
  7. Imagens
  8. Indicação da interface
  9. O código completo
  10. Explicação do código
  11. Resultado esperado (testado)
  12. Problemas comuns
  13. Exercício guiado
  14. Desafio individual
  15. Desafio avançado (opcional)
  16. Critérios de avaliação
  17. Checklist de conclusão
  18. Extensão

Módulo 6 · Aula 6.4 · Achar o caminho: Personagem de caminho

Carga horáriaDificuldadeFerramentaCompetências
8 h/a⭐⭐⭐GDevelop 5C2, C5

Objetivos de aprendizagem

  1. Explicar por que "andar em linha reta até o jogador" não funciona com obstáculos.
  2. Usar os comportamentos Personagem de caminho (no inimigo) e Obstáculo para a busca de caminho (nas cercas).
  3. Mandar o inimigo para um ponto com Mover para uma posição e saber quando ele chegou.
  4. Recalcular o caminho de tempos em tempos, não a cada quadro.
  5. Impedir que o jogador atravesse as cercas.

Pré-requisitos

Aula 6.3.

Materiais

Computador com o GDevelop; o Cajueiral.

Conceitos

Linha reta não basta. Na Aula 3.7 o redemoinho ia direto até o jogador com uma força. Com uma cerca no meio, ele ficaria preso nela. É preciso um caminho que dê a volta.

Grade virtual. O comportamento divide a cena em quadradinhos (células) e procura uma sequência de células livres do inimigo até o destino. As células ocupadas por objetos com Obstáculo para a busca de caminho ficam proibidas.

Personagem de caminho (baseado em grade). Comportamento do inimigo. Propriedades usadas no Cajueiral:

Propriedade (como aparece)ValorPor quê
Largura da célula / Altura da célula16células menores dão caminhos mais justos
Permitir diagonaisnãosem diagonais o cão não "corta a ponta" das cercas (ver a história abaixo)
Rotacionar objetonãoo cão é visto de lado; virar o desenho é feito por evento
Velocidade máximatrocada por eventopatrulha e perseguição têm velocidades diferentes

Obstáculo para a busca de caminho. Comportamento das cercas, com Obstáculo impenetrável marcado.

Ações e condições. Mover para uma posição (aparece como "Mover Cao para X;Y") calcula e começa o caminho. Destino alcançado ("Cao chegou ao seu destino") avisa a chegada. Trajetória encontrada diz se existe caminho.

Recalcular com calma. Perseguindo, o jogador se mexe; o caminho precisa ser refeito. Fazer isso todo quadro (60 vezes por segundo) gasta processamento à toa. O Cajueiral refaz a cada 0,4 s, com o temporizador "Rota".

A história da diagonal (aconteceu de verdade). Na primeira versão o cão podia andar na diagonal. O teste automático mediu a posição dele contornando uma cerca: ao fazer a curva, o desenho do cão passava por cima da ponta da cerca. Com Permitir diagonais desligado, o caminho vira "em L" e o cão contorna sem raspar. O teste passou a conferir isso.

O jogador também não atravessa. O jogador usa Movimento em TopDown, que não conhece cercas. Um evento resolve: colisão com Cerca → ação Separa objetos ("Mova Jogador para longe de Cerca").

Exemplos

SituaçãoSem caminhoCom caminho
jogador atrás de uma cercacão encosta na cerca e paracão dá a volta pela ponta
jogador num corredorcão tenta atravessar a paredecão entra pela abertura

Tutorial passo a passo

Parte A. Obstáculos (30 min)

  1. No objeto Cerca: Adicionar um comportamento → Obstáculo para a busca de caminho (baseado em grade).
  2. No Cao: Personagem de caminho (baseado em grade). Ajuste células 16, diagonais desligadas, rotacionar desligado.

Parte B. Ir até um ponto (60 min)

  1. Teste simples: No começo da cena → Mover para uma posição o Cao até Jogador.X(), Jogador.Y().
  2. Visualizar com o jogador atrás de uma cerca. O cão dá a volta?
  3. Troque para o destino da patrulha (a conta da Aula 6.3).

Parte C. Perseguir com calma (60 min)

  1. Temporizador de cena "Rota" iniciado no começo da cena.
  2. Evento: Estado = "persegue" e "Rota" ≥ 0,4 → Mover para uma posição até o jogador.
  3. Evento logo abaixo: "Rota" ≥ 0,4 → reiniciar "Rota".

Parte D. Diagonais e cerca do jogador (60 min)

  1. Experimento: ligue Permitir diagonais e observe o cão contornando a ponta de uma cerca bem de perto. Desligue e compare. Registre no diário.
  2. Evento: Colisão Jogador com Cerca → Separa objetos Jogador de Cerca. Tente atravessar uma cerca com as setas.

Parte E. Ver o caminho (30 min)

  1. Desafio de depuração: mostre num texto provisório se a Trajetória encontrada é verdadeira. Coloque o jogador num lugar fechado por cercas: o que acontece?

Imagens

  • Captura real, grupo "Jogador" com Separa objetos e o começo da fase com "Mover Cao para ...": recursos/imagens/gdevelop/captura-cajueiral-regras-1.png.
  • Captura real, recalcular a cada 0,4 s: recursos/imagens/gdevelop/captura-cajueiral-regras-2.png.

Indicação da interface

ItemOnde fica
Comportamentos de caminhoAdicionar um comportamento; pesquise "caminho"
Propriedades do comportamentoaba Comportamentos do objeto
Mover para uma posição, Destino alcançado, Trajetória encontradaações e condições do objeto Cao, grupo do comportamento de caminho
Separa objetosações do objeto Jogador, grupo de posição (pesquise "separa")

O código completo

Grupo "Jogador" (parte):
Comentário: A cerca não deixa o jogador passar: se encostou, é empurrado para fora.
Jogador está em colisão com Cerca   → Mova Jogador para longe de Cerca (somente Jogador será movido)

Grupo "Cão: máquina de estados" (parte):
Comentário: Perseguindo: recalcula o caminho até o jogador a cada 0.4 s (não precisa ser todo quadro).
A variável Estado de Cao = "persegue"
O temporizador "Rota" ≥ 0.4 segundos   → Mover Cao para Jogador.X();Jogador.Y()
O temporizador "Rota" ≥ 0.4 segundos   → Iniciar (ou resetar) o temporizador "Rota"

Explicação do código

  • O reinício do temporizador fica num evento separado e depois do "Mover". Assim ele é reiniciado uma vez só, para a cena toda, e todos os cães que estão perseguindo recalculam no mesmo quadro, antes do reinício.
  • O destino é a posição do canto do jogador (Jogador.X(), Jogador.Y()). É perto o bastante para a colisão acontecer.

Resultado esperado (testado)

Teste automático no Cajueiral: com o cão à direita de uma cerca e o jogador à esquerda, a perseguição encontrou um caminho de 5 pontos passando por baixo da ponta da cerca (y ≥ 384), e o desenho do cão não se sobrepôs à cerca em nenhum momento (tolerância de 6 px); o jogador segurando a seta contra a cerca parou antes dela.

Problemas comuns

SintomaCausaSolução
O cão atravessa a cercafalta Obstáculo na cercaadicionar o comportamento na cerca
O cão raspa na ponta das cercasdiagonais permitidasdesligar Permitir diagonais
O cão não sai do lugarnenhum caminho possível (destino dentro de obstáculo ou fechado)conferir Trajetória encontrada; mudar o destino
O jogo fica lento com muitos inimigosrecalculando todo quadrotemporizador de 0,3 a 0,5 s
O cão gira de cabeça para baixoRotacionar objeto ligadodesligar
Teste "teletransportando" o cão não funcionao comportamento recoloca o objeto no caminho deledepois de mudar a posição, mandar um Mover para uma posição novo

Exercício guiado

Uma cena de 800 × 600 com células de 16 × 16 tem quantas células? E com células de 32? (Resposta: 50 × 37,5, então cerca de 1.900; com 32, 25 × 19, uns 475. Células maiores calculam mais rápido, mas o caminho fica mais "quadrado".)

Desafio individual

Faça o cão desistir também se não existir caminho até o jogador (condição Trajetória encontrada invertida).

Desafio avançado (opcional)

Experimente o comportamento de navegação "baseado em navmesh", que aparece na mesma lista. Compare com o de grade e registre diferenças. Este caminho não foi testado no curso.

Critérios de avaliação

  • Cão contornando cercas para perseguir e voltar.
  • Recalcular com temporizador.
  • Jogador sem atravessar cercas.

Checklist de conclusão

Extensão

Geografia: aplicativos de mapa também procuram caminhos. Peça a um aplicativo a rota a pé da escola até a praça e compare com a rota que você faria. Por que podem ser diferentes?