Cambio de Escenas
Una vez que tu juego alcanza cierto tamaño, querrás empezar a cambiar entre escenas. Eso podría significar cambiar de una introducción o menú al juego, o de un nivel a otro.
La función más importante que debes conocer aquí es engine.loadMainScene(),
que reemplazará la escena actual con un nombre de archivo .bin o URL que le pases para cargar.
Este podría ser un ejemplo de un componente que cambia a otra escena después de un cierto tiempo:
import {Component, Property} from '@wonderlandengine/api';
export class LoadAfterDelay extends Component {
static TypeName = 'load-after-delay';
static Properties = {
sceneFile: Property.string("AnotherScene.bin"),
delaySeconds: Property.float(10),
};
start() {
setTimeout(() => {
this.engine.loadMainScene({ file: this.sceneFile });
}, this.delaySeconds*1000);
}
}); Precarga de Escenas
Aunque la escena seguirá ejecutándose mientras la siguiente se está cargando, esto provocará un retraso entre el inicio de la carga y la aparición de la siguiente escena para el usuario.
Para minimizar este tiempo, puedes colocar las siguientes etiquetas HTML en el <head> de tu
index.html:
{/* not needed <link rel="preload" href="First.bin" ... /> */}
<link rel="preload" href="Next.bin" as="fetch" crossorigin async />
<link rel="preload" href="Last.bin" as="fetch" crossorigin async /> También puedes agregar estas etiquetas dinámicamente a través de JavaScript.
Advertencias
Cargar una escena no limpiará automáticamente los event listeners. Esto incluye
los event listeners en elementos DOM y las callbacks añadidas a emisores.
Eres responsable de eliminar los event listeners. La mejor práctica es
hacerlo en onDeactivate de tu componente.
onDeactivate se llama antes de onDestroy. Ambos se llaman cuando una escena
se descarga.
keyUpHandler = e => { /* ... */ };
onActivate() { /* o start() */
this.engine.canvas.addEventListener('keyup', this.keyUpHandler);
}
onDeactivate() {
/* Elimina el listener para las recargas de escena, de lo contrario la pulsación de teclas se
* manejará varias veces o también en la siguiente escena */
this.engine.canvas.removeEventListener('keyup', keyUpHandler);
}