Pular para o conteúdo
Baixar

Guardar dados entre rooms

Você quer que as vidas e as moedas do jogador continuem as mesmas quando ele passa de fase.

Quando o jogo troca de room, as instâncias da room antiga somem. Há dois jeitos de manter uma viva.

Um objeto global nasce uma vez, na primeira room, e existe em todas as outras, sem você colocar uma instância em cada fase. É o lugar certo para um controlador do jogo.

  1. Crie um objeto, por exemplo Controle, com as variáveis moedas e vidas.
  2. Em Projeto › Configurações do projeto…, em Objetos globais, clique em + Objeto global e escolha Controle.

De qualquer outro objeto, ache o controlador com instance:

onTouchStart<Player>([this](Player&) {
instance<Controle>()->moedas += 1;
destroy();
});

instance<Controle>() devolve a primeira instância viva do objeto, ou nullptr se não houver nenhuma.

Marque Persistente no Inspetor do objeto. A instância passa para a próxima room com tudo o que tinha: variáveis, temporizadores, posição.

Use quando a instância já está numa room e precisa ir junto, como o próprio jogador.

  • O restart() não recria um objeto persistente ou global. Se o jogo recomeça no fim de jogo, zere você mesmo as vidas e as moedas.
  • A posição também é guardada. Um jogador persistente chega na room nova no mesmo x e y em que estava. Reposicione no código se precisar.
  • Não guarde um ponteiro para outra instância. Ela pode sumir na troca de room. Guarde um Handle:
Handle<Enemy> alvo;
if (Enemy* perto = closest<Enemy>()) alvo = perto->handle<Enemy>();
// mais tarde:
if (Enemy* enemy = alvo.get()) enemy->destroy();