Módulo 4 · Aula 4.6 · Estados do jogo e pausa
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 8 h/a | ⭐⭐⭐ | GDevelop 5 (gdevelop.io) | C2, C5 |
Objetivos de aprendizagem
- Guardar o estado do jogo numa variável de texto (
"jogando","pausado"). - Pausar o jogo inteiro com a escala de tempo.
- Mostrar e esconder uma camada inteira.
- Entender e corrigir o erro clássico do "liga e desliga no mesmo quadro".
Pré-requisitos
Aulas 4.2 (camadas) e 4.5.
Materiais
Computador com o GDevelop.
Conceitos
Estado. Uma palavra que diz em que situação o jogo está. A Trilha usa Estado = "jogando" ou "pausado". Outros jogos têm "menu", "cutscene", "chefao". Cada evento pode perguntar o estado antes de agir.
Escala de tempo. Número que multiplica a passagem do tempo. 1 = normal; 0 = parado; 0,5 = câmera lenta. Com 0, forças, gravidade, animações e temporizadores param. Os eventos continuam rodando, por isso o teclado ainda funciona para despausar.
Mostrar e ocultar camada. A camada Pausa tem um retângulo escuro e o texto "PAUSADO". Começa oculta e aparece só na pausa.
O erro do liga-desliga. A primeira ideia é escrever dois eventos:
[P] acabou de ser pressionada + Estado = "jogando" → Estado = "pausado"
[P] acabou de ser pressionada + Estado = "pausado" → Estado = "jogando"Parece certo, mas não funciona. No mesmo quadro o primeiro muda para "pausado" e o segundo, logo abaixo, vê "pausado" e volta para "jogando". O jogo nunca pausa. A solução da Trilha: o teclado só pede a troca (TrocarPausa = 1). Dois eventos olham o pedido; o primeiro que agir zera TrocarPausa, e o segundo já não vê o pedido.
Exemplos
| Jogo | Estados |
|---|---|
| Trilha da Serra | jogando, pausado |
| jogos de luta | escolhendo personagem, lutando, fim de round |
| jogos de RPG | andando, conversando, batalha, menu |
Tutorial passo a passo
Parte A. A camada da pausa (40 min)
- Crie a camada
Pausaacima deInterface. - Nela, um texto grande "PAUSADO" e uma linha menor "Aperte P para continuar". Se quiser, um retângulo escuro meio transparente atrás.
- No No começo da cena:
Estado="jogando"e Ocultar camada"Pausa".
Parte B. A versão errada, de propósito (40 min)
- Escreva os dois eventos da seção Conceitos, com Escala de tempo 0 e Mostrar camada no primeiro, e escala 1 e Ocultar camada no segundo.
- Visualizar e aperte [P]. Anote o que acontece.
Parte C. A versão certa (60 min)
- Apague os dois eventos. Crie:
- [P] acabou de ser pressionada →
TrocarPausa= 1; TrocarPausa= 1 eEstado="jogando"→Estado="pausado"; escala 0; Mostrar camada"Pausa";TrocarPausa= 0;TrocarPausa= 1 eEstado="pausado"→Estado="jogando"; escala 1; Ocultar camada"Pausa";TrocarPausa= 0.
- [P] acabou de ser pressionada →
- Visualizar. Pause no meio de um pulo e confira que o jogador fica parado no ar.
Imagens
- Captura real, grupo "Pausa" com os três eventos:
recursos/imagens/gdevelop/captura-trilha-eventos-1.png
. - Captura real, jogo pausado com a camada
Pausavisível:recursos/imagens/gdevelop/trilha-tela-pausa.png
.
Indicação da interface
| Item | Onde fica |
|---|---|
| Tecla acabou de ser pressionada | condições de teclado (pesquisar "acabou de ser") |
| Variável de texto | ao criar a variável, escolher o tipo texto; na condição, comparar com aspas |
| Escala de tempo | ações, grupo de tempo (pesquisar "escala") |
| Mostrar camada / Ocultar camada | ações, grupo de camadas e câmeras |
O código completo
Grupo "Pausa":
Comentário: P pede a troca; os dois eventos abaixo atendem o pedido uma única vez.
Tecla "p" acabou de ser pressionada → Alterar a variável TrocarPausa: definir como 1
A variável TrocarPausa = 1
A variável Estado = "jogando" → Alterar a variável Estado: definir como "pausado"
Alterar a escala de tempo para 0
Mostrar a camada "Pausa"
Alterar a variável TrocarPausa: definir como 0
A variável TrocarPausa = 1
A variável Estado = "pausado" → Alterar a variável Estado: definir como "jogando"
Alterar a escala de tempo para 1
Ocultar a camada "Pausa"
Alterar a variável TrocarPausa: definir como 0Explicação do código
- Zerar
TrocarPausadentro do evento que agiu é o que impede o segundo de agir no mesmo quadro. - "Acabou de ser pressionada" vale só no primeiro quadro do aperto. Com "está pressionada", segurar [P] pausaria e despausaria sem parar.
Resultado esperado (testado)
Teste automático: [P] mudou Estado para "pausado", a escala de tempo foi para 0, a camada Pausa ficou visível e o jogador não se mexeu com a seta apertada; outro [P] voltou tudo ao normal.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
| [P] não faz nada | o erro do liga-desliga | usar TrocarPausa |
| O jogo pausa e despausa sozinho | usou "está pressionada" | usar "acabou de ser pressionada" |
| Pausado mas a camada não aparece | nome da camada diferente | conferir maiúsculas: "Pausa" |
| Pausa já começa ligada | esqueceu de ocultar no começo da cena | Ocultar camada no começo |
| Despausar não funciona | colocou condição de estado na leitura da tecla | a leitura da tecla não deve depender do estado |
Exercício guiado
Com escala de tempo 0,5, um temporizador marca quanto depois de 4 segundos de relógio? (Resposta: 2 segundos.)
Desafio individual
Na tela de pausa, faça [R] reiniciar a fase (ação Trocar a cena para a própria cena Jogo). Cuidado: volte a escala para 1 antes.
Desafio avançado (opcional)
Crie um estado "contagem": ao começar a fase, mostra 3, 2, 1 e só então muda para "jogando". Os controles do jogador só funcionam em "jogando".
Critérios de avaliação
- Pausa funcionando com camada própria.
- Registro no diário do erro do liga-desliga e da solução.
Checklist de conclusão
Extensão
Desenhe o diagrama de estados de um semáforo ou de uma máquina de lavar: bolinhas para os estados e setas para o que faz trocar.