Módulo 4 · Aula 4.8 · Pedras que rolam da serra: criar objetos com o tempo
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 6 h/a | ⭐⭐ | GDevelop 5 (gdevelop.io) | C2 |
Objetivos de aprendizagem
- Criar objetos durante o jogo em intervalos regulares.
- Sortear a posição de criação perto do jogador.
- Apagar objetos que saíram da tela para o jogo não ficar pesado.
- Ligar um perigo novo à porta de dano da Aula 4.5 com uma linha só.
Pré-requisitos
Aulas 4.5 e 3.6 (temporizadores e sorteio).
Materiais
Computador com o GDevelop; pedra.png.
Conceitos
Gerador. Um par temporizador + ação Criar um objeto. A cada 5 segundos, uma pedra nasce acima da tela (y = −40) e cai.
Perto do jogador. A posição X é Jogador.X() + RandomInRange(-250, 250): até 250 px para qualquer lado. Se fosse sorteada na fase inteira (0 a 2400), quase todas as pedras cairiam longe e ninguém veria.
Queda com força. As pedras não têm comportamento de plataforma. Uma força instantânea de 260 px/s para baixo, todo quadro, faz a pedra descer em velocidade constante. É mais simples que gravidade e fácil de desviar.
Limpeza. Toda pedra com y > 650 é apagada. Sem isso, depois de 10 minutos haveria 120 pedras caindo para sempre abaixo da fase, gastando processamento.
Reaproveitar a porta de dano. Colisão com a pedra só faz Dano = 1 (e apaga a pedra). Invencibilidade, som e perda de vida já existem.
Exemplos
| Jogo | O que é gerado |
|---|---|
| Trilha da Serra | pedra a cada 5 s |
| Coleta do Caju (Módulo 1) | caju a cada intervalo |
| jogos de nave | inimigos em ondas |
Tutorial passo a passo
Parte A. A pedra (30 min)
- Objeto Sprite
Pedracompedra.png. Não coloque nenhuma instância na cena. - No No começo da cena: Iniciar (ou redefinir) um temporizador de cena
"Pedras".
Parte B. O gerador (60 min)
- Comentário: "A cada 5 segundos uma pedra cai da serra perto do jogador."
- Evento: Valor de um temporizador de cena
"Pedras"≥ 5 → Criar um objetoPedraem X =Jogador.X() + RandomInRange(-250, 250), Y =-40; reiniciar"Pedras". - Evento sem condição: força instantânea na Pedra X = 0, Y = 260.
- Visualizar e fique parado. Conte as pedras em 30 segundos.
Parte C. Limpar e machucar (40 min)
- Evento: Posição Y da Pedra > 650 → Excluir o objeto Pedra.
- Evento: Colisão Jogador com Pedra → excluir a Pedra;
Dano= 1. - Use o depurador do GDevelop (ou um texto provisório com
SceneInstancesCount(Pedra)) para confirmar que o número de pedras não cresce sem parar.
Imagens
- Captura real, eventos das pedras no grupo "Inimigos e perigos":
recursos/imagens/gdevelop/captura-trilha-eventos-3.png
.
Indicação da interface
| Item | Onde fica |
|---|---|
| Criar um objeto | ações, grupo de objetos (pesquisar "criar") |
RandomInRange | digitar no campo de expressão; o editor sugere |
| Condição Posição Y | objeto Pedra, grupo de posição |
O código completo
Comentário: A cada 5 segundos uma pedra cai da serra perto do jogador.
O temporizador "Pedras" ≥ 5 segundos → Criar objeto Pedra na posição
Jogador.X() + RandomInRange(-250, 250); -40 (camada: Camada base)
Iniciar (ou resetar) o temporizador "Pedras"
(sem condição) → Adicionar à Pedra instantânea uma força de 0 p/s no eixo X
e 260 p/s no eixo Y
A posição Y de Pedra > 650 → Deletar Pedra
Jogador está em colisão com Pedra → Deletar Pedra
Alterar a variável Dano: definir como 1Explicação do código
- Reiniciar o temporizador dentro do mesmo evento que cria é o que faz "uma a cada 5 s". Esquecer isso cria uma pedra por quadro depois do quinto segundo.
- A pedra recém-criada já recebe a força no mesmo quadro, porque o evento da força vem logo abaixo.
Resultado esperado (testado)
Teste automático: com o temporizador "Pedras" adiantado, apareceu pelo menos uma pedra e ela desceu mais de 40 px em pouco tempo. A colisão com a pedra usa a mesma porta de dano já testada na Aula 4.5.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
| Chuva infinita de pedras | não reinicia o temporizador | reiniciar no mesmo evento |
| Pedra nasce e fica parada | evento de força faltando | adicionar força Y 260 |
| Pedras aparecem no início da fase mesmo com o jogador longe | X fixo | usar Jogador.X() + ... |
| Jogo fica lento depois de um tempo | pedras não são apagadas | evento Y > 650 |
Exercício guiado
Em 1 minuto e meio de jogo, quantas pedras foram criadas? (Resposta: 90 ÷ 5 = 18.)
Desafio individual
Deixe o jogo mais difícil com o tempo: o intervalo começa em 5 s e diminui 0,5 s a cada pedra, sem passar de 2 s. Dica: troque o 5 por uma variável.
Desafio avançado (opcional)
Mostre uma sombra no chão 1 segundo antes de a pedra cair, no mesmo X, como aviso para o jogador.
Critérios de avaliação
- Gerador funcionando com posição sorteada perto do jogador.
- Pedras apagadas fora da tela.
Checklist de conclusão
Extensão
Em Matemática, RandomInRange(-250, 250) sorteia entre 501 valores inteiros. Qual a chance de a pedra cair exatamente em cima do jogador, se ele ocupa 32 px de largura? (Resposta aproximada: 32 em 501, uns 6%.)