微信游戏开发中常驻节点的场景切换和数据传输
引擎一次只会运行一个场景。当切换到新场景时,默认情况下,当前场景中的所有节点和其他实例都将被破坏。
假设你从场景a切换到新场景b,中间会经历哪些流程?
场景b预加载了preload scene-& gt;场景b的加载->;场景b的onstart->;跳到场景B-& gt;场景a资源释放
场景A中引用的静态资源会自动释放,但是动态加载的资源需要开发者自己手动释放。
问题场景:
场景A在onLoad中动态加载资源D,在场景b中也是动态加载的,根据引用计数的资源释放机制的用法,场景A加载资源D时需要addRef = 1,销毁场景A时需要decRef = 0,资源D被释放。但此时场景B中动态加载资源D,需要addRef+1,就会出现场景B中的资源D。如果不使用decRef,场景B中的资源D将不会被释放,因为refCount不为0。
结论:
从这个问题出发,引用计数的资源释放机制应该是对单个场景中的多个组件引用同一个资源D,适合引用计数,用于控制场景被破坏时是否破坏资源。
释放资源要根据各种场景下资源的实际使用情况,结合释放和引用计数来使用。
场景A跳转到场景B时,如何将参数数据传递给场景B使用?
“cc.director.loadScene”方法不携带带参数启动场景的功能,由CocosCreator管理场景资源,通过“常驻节点”传递参数。如何理解「常驻节点」?
切换新场景时,默认情况下,当前场景中的所有节点和其他实例都将被破坏。所谓“常驻节点”,是指场景切换时,不会自动销毁的内存常驻中的节点组件。那么这个驻留节点应该建在哪里呢?
首先,CocosCreator推荐使用Canvas节点作为渲染根节点,微信小游戏强制要求渲染根节点必须是Canvas。永久节点与画布节点创建在同一层级,即不能作为画布节点的子节点,而应该在场景的根节点下,如下图所示。分析可能有两个原因:
将StartData节点设置为驻留节点:
获取新场景中传递的数据:
注意:cc.game.removePersistRootNode不会立即销毁指定的节点,只是将节点恢复到场景变化时可以销毁的节点。
定义全局变量窗口。全球:
由于所有脚本都被强制声明为“use strict”,因此窗口。定义全局变量时不能省略。
然后,您可以直接初始化Global并在需要时访问它:
注意:
看完以上,你应该知道如何播放全球背景音乐了。如果不知道怎么办,可以仔细看看。
如果属性面板中没有设置bgMusic播放的音频资源,将动态播放默认的音频资源。
既然你看到了这个,说明文章对你还是有用的。走之前请给我一个赞。谢谢大家!
自己写,分解项目中各个模块的需求,通过查文档和搜索Cocos社区解决遇到的问题。最后在微信上推出了以下微信游戏《成语锦衣卫》。欢迎大家扫码,作为参考项目模板,开发自己的游戏。
下一节我就和朋友们说说微信登录功能的实现,CocosCreator的第三方服务腾讯TCB云开发,微信云开发。