Cambio de escena de desarrollo de minijuegos WeChat y transferencia de datos de nodo residente
La serie de artículos sobre el desarrollo del minijuego CocosCreator WeChat se basa en algunos contenidos clave registrados en los documentos oficiales durante el proceso de desarrollo paso a paso, así como suplementos y análisis de algunos puntos de conocimiento en los documentos oficiales. .
El motor solo ejecutará una escena a la vez. Al cambiar a una nueva escena, todos los nodos y otras instancias de la escena actual se destruirán de forma predeterminada.
Supongamos que cambias de la escena A a una nueva escena B, ¿qué sucede?
Precarga de escena B preloadScene -> onLoad de escena B -> onStart de escena B -> saltar a escena B -> Liberación de recursos de escena A
Los recursos estáticos a los que se hace referencia en la escena A Los recursos liberados automáticamente, pero cargados dinámicamente, deben ser liberados manualmente por el desarrollador.
Escenario del problema:
La escena A carga dinámicamente el recurso D en onLoad, luego cambia a la escena B, y la escena B también carga dinámicamente el recurso D. De acuerdo con el uso del mecanismo de recuento de referencias para liberar recursos, cuando el recurso D se carga en la escena A, se debe agregarRef = 1, y cuando se destruye la escena A, se debe decRef = 0, y el recurso D se debe liberar manualmente. . Cuando decRef = 0, se libera el recurso D, pero en este momento, la escena B carga dinámicamente el recurso D. Cuando se agrega addRef + 1, el recurso D en la escena B tendrá isValid = false, lo que provocará que el recurso no se muestre. Y si no es decRef, el recurso D en la escena B no se liberará porque refCount no es 0.
Conclusión:
De esta pregunta, podemos aprender que el mecanismo de liberación de recursos del recuento de referencias debería ser aplicable a la situación en la que varios componentes hacen referencia al mismo recurso D en una sola escena. Y es adecuado para el recuento de referencias, que se utiliza para controlar si los recursos se destruyen cuando se destruye la escena.
La liberación de recursos es una combinación de liberación y recuento de referencias, que depende del uso real del recurso en cada escenario.
Cuando la escena A salta a la escena B, ¿cómo se pasan datos de parámetros a la escena B para que los use?
El método "cc.director.loadScene" no puede iniciar una escena con parámetros. CocosCreator logra esto a través de "nodos residentes". CocosCreator utiliza "nodos residentes" para la gestión de recursos de la escena y el paso de parámetros. ¿Qué quiere decir con "nodo residente"?
Cuando cambias a una nueva escena, todos los nodos y otras instancias de la escena actual se destruyen de forma predeterminada. El "nodo residente" es un componente del nodo que reside en la memoria y no se destruirá automáticamente al cambiar de escena. ¿Dónde se debe construir el nodo residente?
En primer lugar, CocosCreator recomienda utilizar el nodo Canvas como representación. nodo raíz, y los juegos WeChat también requieren que el nodo raíz de representación sea Canvas. El nodo residente se crea en el mismo nivel que el nodo Canvas, es decir, no es un nodo secundario del nodo Canvas, sino el nodo raíz de. la escena. La siguiente figura muestra esto por dos razones:
Establecer el nodo StartData como nodo residente:
Obtener los datos pasados en la nueva escena:
Nota: cc.game.removePersistRootNode No destruye el nodo especificado inmediatamente, simplemente restaura el nodo a un nodo que puede destruirse cuando cambia la escena
Defina la variable global window.Global: <. /p>
Dado que todos los scripts deben declarar "uso estricto", window.Global no se puede omitir al definir variables globales.
Luego, cuando necesites usarlo, puedes inicializar Global directamente y acceder a él:
Nota:
Para la reproducción global de música de fondo, lee lo anterior Debes saber cómo implementar el contenido. Si aún no sabes cómo hacerlo, puedes buscarlo con atención.
Si el recurso de audio reproducido por bgMusic no está configurado en el panel de propiedades, el recurso de audio predeterminado se reproducirá dinámicamente.
Ya que estás leyendo este artículo, significa que todavía te resulta útil, así que antes de irte, dale me gusta, ¡gracias!
Lo escribí yo mismo, descompuse los requisitos de cada módulo del proyecto y resolví los problemas encontrados al ver documentos y buscar en la comunidad Cocos. Finalmente, lancé el siguiente minijuego de WeChat "Idiom Gold Finger". " en WeChat. , todos pueden escanear el código para experimentarlo y usarlo como plantilla de proyecto de referencia para desarrollar su propio minijuego
Hablemos con amigos en la siguiente sección: Malentendidos sobre WeChat implementación de la función de inicio de sesión, servicio de terceros CocosCreator, desarrollo en la nube Tencent TCB y desarrollo en la nube WeChat