Guardar datos entre rooms
Quieres que las vidas y las monedas del jugador sigan iguales cuando pasa de nivel.
Cuando el juego cambia de room, las instancias de la room anterior desaparecen. Hay dos maneras de mantener una viva.
Un objeto global
Sección titulada «Un objeto global»Un objeto global nace una vez, en la primera room, y existe en todas las demás, sin que coloques una instancia en cada nivel. Es el lugar correcto para un controlador del juego.
- Crea un objeto, por ejemplo
Controle, con las variablesmoedas(monedas) yvidas. - En Projeto › Configurações do projeto… (Proyecto › Configuración del proyecto), en Objetos globais (objetos globales), haz clic en + Objeto global y elige
Controle.
Desde cualquier otro objeto, encuentra el controlador con instance:
onTouchStart<Player>([this](Player&) { instance<Controle>()->moedas += 1; destroy();});instance<Controle>() devuelve la primera instancia viva del objeto, o nullptr si no hay ninguna.
Un objeto persistente
Sección titulada «Un objeto persistente»Marca Persistente en el Inspector del objeto. La instancia pasa a la siguiente room con todo lo que tenía: variables, temporizadores, posición.
Úsalo cuando la instancia ya está en una room y tiene que ir junto, como el propio jugador.
Cuidados
Sección titulada «Cuidados»- El
restart()no vuelve a crear un objeto persistente o global. Si el juego recomienza al terminar la partida, pon tú mismo las vidas y las monedas en cero. - La posición también se guarda. Un jugador persistente llega a la room nueva en la misma
xeyen que estaba. Reubícalo en el código si hace falta. - No guardes un puntero a otra instancia. Puede desaparecer al cambiar de room. Guarda un Handle:
Handle<Enemy> alvo;if (Enemy* perto = closest<Enemy>()) alvo = perto->handle<Enemy>();// más tarde:if (Enemy* enemy = alvo.get()) enemy->destroy();Mira también
Sección titulada «Mira también»- Cambiar de room.
- Instancias:
instance<T>(),count<T>(),each<T>(fn). - Configuración del proyecto.
