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
Seção intitulada “Um objeto global”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.
- Crie um objeto, por exemplo
Controle, com as variáveismoedasevidas. - 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.
Um objeto persistente
Seção intitulada “Um objeto persistente”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.
Cuidados
Seção intitulada “Cuidados”- 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
xeyem 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();Veja também
Seção intitulada “Veja também”- Trocar de room.
- Instâncias:
instance<T>(),count<T>(),each<T>(fn). - Configurações do projeto.
