Módulo 6 · Aula 6.5 · Salvar o progresso
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 8 h/a | ⭐⭐⭐ | GDevelop 5 | C2, C6 |
Objetivos de aprendizagem
- Explicar a diferença entre variável (some ao fechar o jogo) e armazenamento (fica guardado).
- Salvar um número no armazenamento quando o jogador termina uma fase.
- Ler esse número ao abrir o menu, só se ele existir.
- Apagar o progresso salvo.
- Saber onde o navegador guarda esses dados e o que isso significa para a privacidade.
Pré-requisitos
Aulas 6.2 e 4.9 (variáveis globais).
Materiais
Computador com o GDevelop.
Conceitos
Variável × armazenamento. Variáveis (até as globais) vivem enquanto o jogo está aberto. Fechou a aba, sumiram. O armazenamento grava no próprio dispositivo e continua lá na próxima vez.
Armazenamento e grupo. O armazenamento tem um nome ("progresso") e dentro dele ficam grupos com nome ("faseLiberada"), cada um com um valor. É como uma gaveta com etiquetas.
As quatro instruções do Cajueiral:
| Instrução (como aparece) | Tipo | Para quê |
|---|---|---|
| Salvar um valor | ação | grava FaseLiberada no grupo "faseLiberada" do armazenamento "progresso" |
| Existência de um grupo | condição | confere se já existe algo salvo, para não ler o que não existe |
| Carregar um valor | ação | lê o grupo e põe numa variável |
| Limpar um armazenamento | ação | apaga tudo do armazenamento "progresso" |
Salvar só quando melhora. O jogo grava Fase + 1 só se for maior que o que já estava liberado. Quem rejoga a fase 1 depois de chegar à 3 não perde o progresso.
Onde fica, no navegador. Num jogo web, o GDevelop guarda o armazenamento no espaço do próprio navegador para aquele site. No teste, apareceu com o nome GDJS_progresso. Outro navegador, outro computador ou uma janela anônima não têm esse dado. Limpar os dados do navegador apaga o progresso.
Privacidade. Só guarde o necessário. O Cajueiral guarda um número. Nunca guarde nome completo, telefone ou senha de jogador num jogo escolar.
Exemplos
| Jogo | O que salva |
|---|---|
| O Cajueiral | a maior fase liberada |
| jogos de quebra-cabeça | estrelas de cada fase |
| jogos de corrida | melhor tempo de cada pista |
Tutorial passo a passo
Parte A. Salvar (60 min)
- Variável global
FaseLiberada, número, valor 1. - No evento da saída (Aula 6.2), um subevento: Comparar dois números
Fase + 1>FaseLiberada→FaseLiberada=Fase + 1e Salvar um valor: armazenamento"progresso", grupo"faseLiberada", valorFaseLiberada.
Parte B. Carregar (60 min)
- Na cena
Menu, evento com duas condições: No começo da cena e Existência de um grupo"faseLiberada"no armazenamento"progresso". - Ação Carregar um valor: grupo
"faseLiberada"do armazenamento"progresso", guardar emFaseLiberada. - Mostre
FaseLiberadanum texto provisório para conferir.
Parte C. Provar que ficou salvo (60 min)
- Visualizar, passe a fase 1, feche a janela do jogo, Visualizar de novo. O menu lembra?
- Feche o GDevelop inteiro e abra de novo. Ainda lembra? Anote.
Parte D. Apagar (30 min)
- No menu: tecla [R] → Limpar um armazenamento
"progresso"eFaseLiberada= 1. - Teste. Por que é preciso também mudar a variável, e não só apagar o armazenamento?
Parte E. Conversa sobre privacidade (30 min)
- Que dados de jogador vocês acham aceitável um jogo guardar? E um aplicativo? Registre a conclusão da turma.
Imagens
- Captura real, evento de salvar ("Salvar valor FaseLiberada em "faseLiberada" do armazenamento "progresso""):
recursos/imagens/gdevelop/captura-cajueiral-regras-3.png
. - Captura real, menu lendo e apagando o progresso:
recursos/imagens/gdevelop/captura-cajueiral-menu-eventos.png
.
Indicação da interface
| Item | Onde fica |
|---|---|
| Instruções de armazenamento | janela de ações e condições, grupo de armazenamento (pesquise "armazenamento") |
| Comparar dois números | Outras Condições |
O código completo
Regras, ao passar pela porteira (subevento):
Fase + 1 > FaseLiberada → Alterar a variável FaseLiberada: definir como Fase + 1
Salvar valor FaseLiberada em "faseLiberada" do armazenamento "progresso"
Cena Menu:
Comentário: Ao abrir o menu, lê do armazenamento do navegador até que fase o jogador já chegou.
No começo da cena
"faseLiberada" existe no armazenamento "progresso"
→ Carregue "faseLiberada" do armazenamento "progresso" e armazene o valor em FaseLiberada
Comentário: R apaga o progresso salvo.
A tecla "r" foi pressionada → Excluir o armazenamento "progresso"
Alterar a variável FaseLiberada: definir como 1Explicação do código
- Sem a condição de existência, na primeira vez o jogo leria um grupo que não existe. Ela deixa claro, para quem lê, que o primeiro acesso é um caso especial.
FaseLiberada= 4 depois de vencer as três fases quer dizer "terminou tudo". O menu só pergunta "≥ 2" e "≥ 3", então funciona.
Resultado esperado (testado)
Teste automático no Cajueiral: ao passar da Fase 1, FaseLiberada virou 2 e o navegador passou a ter GDJS_progresso com {"faseLiberada":{"value":2}}; depois de vencer tudo, a variável foi zerada de propósito para 1 e, ao abrir o menu, ela voltou para 4, lida do armazenamento; [R] deixou o armazenamento vazio e as fases trancadas.
Não testado: fechar e abrir o GDevelop (passo 7) e o jogo exportado num servidor web. A expectativa é que o progresso continue, porque o armazenamento fica no navegador.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
| Sempre volta para a fase 1 | lê antes de existir ou nomes diferentes ao salvar e ler | mesmo nome de armazenamento e grupo nos dois lados |
| Progresso some ao trocar de navegador | o dado fica em cada navegador | é assim mesmo; avisar o jogador |
| [R] não destranca na hora | apagou o armazenamento mas a variável continua 3 | também pôr FaseLiberada = 1 |
| Rejogar a fase 1 tranca a fase 3 | salva sem comparar | salvar só se Fase + 1 > FaseLiberada |
Exercício guiado
FaseLiberada = 3. O jogador termina a Fase 1 de novo. O que é salvo? (Resposta: nada; Fase + 1 = 2 não é maior que 3.)
Desafio individual
Salve também o menor número de vezes que o jogador foi pego em cada fase (grupos "pegoFase1", "pegoFase2"...) e mostre no menu.
Desafio avançado (opcional)
O GDevelop tem ações para salvar o jogo inteiro (posição de todos os objetos) no armazenamento do dispositivo ("Salvar jogo no armazenamento do dispositivo"). Faça uma cena de teste e descubra o que é salvo. Este caminho não foi testado no curso.
Critérios de avaliação
- Progresso salvo, lido e apagado corretamente.
- Registro do teste de fechar e abrir.
- Participação na conversa sobre privacidade.
Checklist de conclusão
Extensão
Matemática/Informática: o valor foi salvo como texto {"faseLiberada":{"value":2}}. Esse formato se chama JSON. Escreva no mesmo formato um "progresso" com três números: fase liberada, castanhas e vezes que foi pego.