新年干货 CocosCreator 开源 UILoader(如何优雅的加载和释放资源) 0.0.1版本

1.开启内存资源监测情况

在UI树的根节点挂上一个 GameScene 脚本,在 GameScene 脚本的 onLoad方法里添加 下面这一行代码

MemoryDetector.showMemoryStatus();

此时你会看到 左下角有 内存纹理的计算

2. 对场景自身携带的资源进行引用计数统计

在UI树的根节点挂上一个 GameScene 脚本,在 GameScene 脚本的 onLoad方法里添加 下面这一行代码

 UILoader.retainScene(this.node);

3. 加载一个预制体资源,并在场景中显示

在UI树的根节点挂上一个 GameScene 脚本,在 GameScene 脚本的 添加一个 onLoaderPrefabClick 方法里添加 下面这一行代码

onLoaderPrefabClick () {
        UILoader.loadRes("select", cc.Prefab, (prefab) => {
            UILoader.instantiate(prefab, this.node, (node) => {
 
            });
        });
    },

绑定事件后,点击加载资源,我们会看到

4. 销毁这个预制体创建出来的节点。

onLoad () {
        this.node.on(cc.Node.EventType.TOUCH_START, () => {
            cc.log("触发点击事件");
            UILoader.destroy(this.node);
        });
    },

此时我们会看到资源已经释放了,并且和资源加载前大小一样,说明我们已经释放干净了,有人可能会说,你那不足以证明释放干净了。那么后面文章会进行相关的说明,现在不加以说明。

5. 更换Sprite纹理

在UI树的根节点挂上一个 GameScene 脚本,在 GameScene 脚本的 添加一个 onLoaderPrefabClick1 方法里添加 下面这一行代码

onLoaderPrefabClick1 () {
        let spriteNode = this.node.getChildByName("icon_sprite");
        UILoader.loadRes("gamename_103", cc.SpriteFrame, (spriteFrame) => {
            UILoader.replaceSpriteTexture(spriteNode, spriteFrame);
        })
    },

此时我们能够看见,资源统计明显有变化。

5. 更换Button纹理

在UI树的根节点挂上一个 GameScene 脚本,在 GameScene 脚本的 添加一个 onLoaderPrefabClick2 方法里添加 下面这一行代码

onLoaderPrefabClick2 () {
        let spriteNode = this.node.getChildByName("icon_button");
        UILoader.loadRes("loginbackBtn", cc.SpriteFrame, (spriteFrame) => {
            UILoader.replaceButtonTexture(spriteNode, spriteFrame, spriteFrame, spriteFrame, spriteFrame);
        })
    },

此时我们也可以看到纹理计算明显少了0.04M

后面还会进行更新 UILoader, 请有意者保持关注。

最后附上 UILoader 开源地址

https://github.com/1083921307/UILoader

博客地址:

http://www.wazhlh.com/​

17赞

赞 

赞一个

1赞

不错的

赞一个

传送门

好东西得顶一下,以表支持

学习了

MemoryDetector.showMemoryStatus();
这是哪的接口?有没有哪种比较方便的统计内存大小的方法

UILoader.instantiate
UILoader.destroy
在程式码中没有看到,
还有在2.1.0版还是无法完全释放资源。

使用UILoader2.x 的版本,就可以

已收藏

没有动态加载服务器资源的方法么?

mark

MemoryDetector这个模块可以在哪获取到的?

已用!

插眼!

战略马克

mark

战略马克