资源释放 [终极方案] 欢迎大家讨论

34赞

你的资源释放实现方式很不错,现在它是我的了。。。

4赞

你的资源释放实现方式很不错,现在它是我的了。。。

1赞

mark~~

1赞

精准释放,赞

1赞

1赞

:grinning: 膜拜大佬

1赞

为了防止图片丢失, 在这儿手写了一份代码, 练习一下

// 2.x 
cc.Component.prototype.addAutoReleaseAsset = function (_asset: cc.Asset) {
    let oneTempAuto = this.node.getComponent(AutoReleaseAssets);
    if (!cc.isValid(oneTempAuto)) {
        oneTempAuto = this.node.addComponent(AutoReleaseAssets);
    };
    oneTempAuto.addAutoReleaseAsset(_asset);
};
cc.Component.prototype.addAutoReleaseAssets = function (_assets: cc.Asset[]) {
    let moreTempAuto = this.node.getComponent(AutoReleaseAssets);
    if (!cc.isValid(moreTempAuto)) {
        moreTempAuto = this.node.addComponent(AutoReleaseAssets);
    };
    for (const _assetSelf of _assets) {
        moreTempAuto.addAutoReleaseAsset(_assetSelf);
    };
};



// AutoReleaseAssets
const { ccclass, menu, disallowMultiple } = cc._decorator;
@ccclass
@menu('资源管理/AutoReleaseAssets/自动释放资源')
@disallowMultiple
export default class AutoReleaseAssets extends cc.component {

    private dynamicsAssets: cc.Asset[] = [];

    // onLoad () {}
    public addAutoReleaseAsset(_asset: cc.Asset) {
        if (cc.isValid(_asset)) {
            _asset.addRef();
            this.dynamicsAssets.push(_asset);
            // console.log("当前动态资源长度=="+this.dynamicsAssets.length);
        }
    };
    onDestroy(): void {
        // console.log("继承cc.Component拥有生命周期如果Node销毁就会顺带销毁这里"); 
        for (let index = 0; index < this.dynamicsAssets.length; index++) {
            if (cc.isValid(this.dynamicsAssets[index])) {
                this.dynamicsAssets[index].decRef();
            }
        }
        this.dynamicsAssets = [];
    };
};
8赞

我试过了 很好用游戏里面dc降到1个了

2赞

好人一胎十个

2赞

:rofl:
那肯定养不起

1赞

和我处理的方式一样,只不过我用的不是Array而是Map

1赞

好人一胎生十个

1赞

战略Mark!

1赞

看楼上回复,加起来已经一胎二十个了:rofl:

1赞

:upside_down_face:
我选择看不见

1赞

我之前是继承到ui父类一个loadres函数,不过比较反感标题。什么最好,终极,到最后都会更新换代

3赞

震惊,国外一小哥程序员竟然写出神一样的代码。

1赞

啊。原来资源还需要释放的啊? :rofl:

5赞

mark一下

1赞