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
  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 3 · Aula 3.7 · O redemoinho: inimigo e vidas

Carga horáriaDificuldadeFerramentaCompetências
10 h/a⭐⭐⭐GDevelop 5 (gdevelop.io)C2, C3, C5

Objetivos de aprendizagem

  1. Mover um objeto em direção a outro usando forças.
  2. Diferenciar força instantânea de força permanente.
  3. Tirar uma vida na colisão e afastar o inimigo para não tirar várias vidas seguidas.
  4. Usar expressões com posição do objeto (Jogador.X()) e a função mod.

Pré-requisitos

Aulas 3.5 e 3.6.

Materiais

Computador com o GDevelop; o seu projeto; ficha de teste com jogadores do Módulo 2.

Conceitos

Força. Um empurrão com direção e velocidade em pixels por segundo. A ação Adicionar uma força para se mover em direção a uma posição empurra o objeto para um ponto.

Instantânea ou permanente. Força instantânea vale só naquele quadro. Como o evento roda em todo quadro, o redemoinho recebe um empurrão novo a cada quadro, sempre apontando para onde o jogador está agora. Força permanente ficaria somando e o redemoinho sairia voando.

Perseguidor que acelera. A velocidade é 60 + TimerElapsedTime("Tempo") * 1.5: começa em 60 px/s e ganha 1,5 px/s a cada segundo. No fim dos 60 s chega a 150, ainda menor que os 200 do jogador. Fugir é sempre possível, mas fica mais difícil. É a curva de dificuldade do Módulo 2 em forma de conta.

Invencibilidade pelo afastamento. A colisão é verdadeira em todo quadro enquanto os dois se encostam. Se não fizermos nada, o jogador perde uma vida a cada 1/60 de segundo. Solução do jogo de referência: no mesmo evento, jogar o redemoinho para longe.

mod(a, b) dá o resto da divisão de a por b. mod(Jogador.X() + 400, 760) dá um ponto sempre a cerca de 400 px do jogador na horizontal, mas dentro da tela.

Exemplos

Jogador em Xmod(X + 400, 760)distância
100500400
38020360
700340360

Tutorial passo a passo

Parte A. O redemoinho persegue (60 min)

  1. O temporizador Tempo ainda não existe; para já funcionar, escreva primeiro a velocidade fixa 60.
  2. Novo evento sem condição. Ação: Redemoinho → Adicionar uma força para se mover em direção a uma posição → X: Jogador.X() → Y: Jogador.Y() → velocidade: 60 → força: instantânea.
  3. Visualizar. Fuja do redemoinho.

Parte B. Perder vida (60 min)

  1. Novo evento. Condição: Jogador → Colisão com Redemoinho.
  2. Ação: Alterar valor da variável → Vidas → "subtrair" → 1.
  3. Visualizar. As vidas despencam até números negativos. Por quê? (Ver Conceitos.)
  4. Na mesma colisão, adicione a ação Redemoinho → Posição → X "definir como" mod(Jogador.X() + 400, 760) → Y "definir como" mod(Jogador.Y() + 250, 480) + 60.
  5. Visualizar. Agora cada encontro tira só 1 vida.

Parte C. Testar e ajustar (60 min)

  1. Três colegas jogam 1 minuto cada. Anote: quantas vezes foram pegos? Acharam fácil, justo ou difícil?
  2. Ajuste a velocidade (40, 60, 90) e repita com outras pessoas. Registre na ficha de teste.

Imagens

  • Captura real, eventos 6 e 7 do jogo de referência ("Move Redemoinho em direção a Jogador.X(); Jogador.Y() com a força instantânea de 60 + TimerElapsedTime("Tempo") * 1.5 pixels" e a colisão com as três ações): recursos/imagens/gdevelop/captura-eventos-parte2.png.

Indicação da interface

ItemOnde fica
Ação de forçajanela de ações, objeto Redemoinho, grupo de movimento com forças (ou pesquisar "força")
Escolha instantânea / permanenteúltimo campo da ação de força
Ação Posiçãoobjeto Redemoinho, grupo de posição

O código completo

Comentário: O redemoinho persegue o sertanejo e fica mais rápido com o tempo.
Condição: (nenhuma)
Ação:     Move Redemoinho em direção a Jogador.X(); Jogador.Y()
          com a força instantânea de 60 + TimerElapsedTime("Tempo") * 1.5 pixels

Comentário: Redemoinho pegou: perde 1 vida e o redemoinho é jogado para longe.
Condição: Jogador está em colisão com Redemoinho
Ações:    Alterar a variável Vidas: subtrair 1
          Altere a posição de Redemoinho: definir como mod(Jogador.X() + 400, 760) (eixo x),
          definir como mod(Jogador.Y() + 250, 480) + 60 (eixo y)

A velocidade com TimerElapsedTime funciona depois da Aula 3.8, quando o temporizador Tempo é ligado no começo da cena. Antes disso, use 60.

Explicação do código

  • O redemoinho mira no canto de cima à esquerda do jogador (X(), Y()), e não no centro. A diferença é pequena e não atrapalha.
  • A ordem das ações da colisão importa pouco aqui, mas é bom tirar a vida antes de mover: quem lê entende a causa antes do efeito.
  • O teste automático do jogo de referência confere que o redemoinho chega mais perto, tira exatamente 1 vida e fica a mais de 250 px depois de pegar.

Resultado esperado

O redemoinho persegue sem parar. Cada vez que encosta, tira 1 vida e reaparece longe.

Problemas comuns

SintomaCausaSolução
Vidas caem várias de uma vezfalta a ação de afastaradicionar Posição na colisão
O redemoinho sai voando e não voltaforça permanentetrocar para instantânea
O redemoinho é mais rápido que o jogadorvelocidade acima de 200reduzir ou aumentar a velocidade do jogador
Reaparece em cima do jogadorexpressão de posição erradaconferir os parênteses do mod

Exercício guiado

Calcule a velocidade do redemoinho aos 0, 20, 40 e 60 segundos. (Resposta: 60, 90, 120, 150 px/s.)

Desafio individual

Dê 2 segundos de invencibilidade depois de perder vida: o jogador pisca (ação de opacidade ou visibilidade) e a colisão não tira vida enquanto um temporizador Invencivel for menor que 2.

Desafio avançado (opcional)

Coloque um segundo redemoinho que aparece aos 30 segundos. Os dois usam o mesmo objeto; o evento de força já vale para os dois. Teste: ficou justo?

Critérios de avaliação

  • Perseguição e perda de vida funcionando.
  • Registro do teste com 3 pessoas e da velocidade escolhida, com justificativa.

Checklist de conclusão

Extensão

Na física, força tem direção e intensidade, como o empurrão do redemoinho. Converse com o professor de Física sobre vetores e mostre o redemoinho como exemplo.