Cc.loader.loadRes 引擎1.3.0rc1 加载图片时,不会同时加载出相关的import文件夹下的.json文件

cc.loader.loadRes 引擎1.3.0rc1 加载图片时,不会同时加载出相关的import文件夹下的.json文件

这个问题在1.2所有版本都是好的,1.3修改了cc.loader模块后,就出这样的题了,麻烦排查下,我看了半天代码都没找到问题发在那。

这个问题会导致我第一个场景加载了资源后,推出场景删除,下次在进这个场景,加载同一个资源,会报错
modular-cocos2d.js 引擎代码 ,求速度解决,好让我升级1.3,这问题卡好长时间没…
setTexture: function(texture){
this._texture = texture;

    if (texture._textureLoaded) {
        var children = this._children, i, len = children.length;
        for (i = 0; i < len; ++i) {
            children[i].setTexture(texture);
        }
    }
    else {
        texture.addEventListener("load", function(){
            var children = this._children, i, len = children.length;
            for (i = 0; i < len; ++i) {
                children[i].setTexture(texture);
            }
        }, this);
    }
},

这个应该在 1.3.1B 就修复了,麻烦试看看?

给个地址吧,我没找到,谢谢

接住 http://forum.cocos.com/t/cocos-creator-v1-3-1-beta-1-win10/40767

我测试了,依然有问题,同样的代码在1.2版本是好的

我分析问题可能是在纹理给释放了,但cc.SpriteFrame数据没释放,加载时你们的加载管道认为纹理还在,到纹理使用时没发现纹理数据导致出错,这问题我在1.1搞出来过的。现在你们加载cc.Loader重构后才出现的

我测试在加载一个图片时,没找到他对应的.json - cc.SpriteFrame数据没出现在加载完成列表中,所以释放时漏释放了这个文件,第二加次数据就损坏了

有需要我们就加微信交流下,这问题卡到我升级不了项目,急死我了~

问题应该是出在你退出第一个场景后,删除了资源导致的。如果你删除的资源,在脚本中还有用到(比如你保存了一个 SpriteFrame),那么 1.3 开始是会导致图片变黑的。

1.3 释放资源的部分做了强化,所以确实可能会有不兼容。如果这样回答仍然解决不了你的问题,可以上传一下你的demo。

我在转场释放资源调用cc.loader.release来释放资源,;但在执行后,图片内存是没有删除的,这是为什么,我直接cc.textureCache.removeTextureForKey(item.url)调用上查以删除图片,但是这样就会在第二次加载图片时黑了,1.2.x引擎是好的,这里我有点没理解怎么改,我项目的内存管理是自己写的

release: function (asset) {
if (Array.isArray(asset)) {
AutoReleaseUtils.autoRelease(this, asset);
}
else if (asset) {
var id = asset._uuid || asset;
var item = this.getItem(id);
if (item) {
var removed = this.removeItem(id);
// TODO: Audio
asset = item.content;
if (asset instanceof cc.Texture2D) {
cc.textureCache.removeTextureForKey(item.url);
}
else if (CC_JSB && asset instanceof cc.SpriteFrame && removed) {
// for the “Temporary solution” in deserialize.js
asset.release();
}
}
}
},

我分析加载的所有资源,在转场时,我对比释放。只有在1.3.x引擎中就这样了,是否引擎有逻辑BUG?
if (typeof textureKeyName !== ‘string’)
return;
就是上面这段代码导致调用cc.loader.release(url)删除不调图片

removeTextureForKey: function (textureKeyName) {
    if (typeof textureKeyName !== 'string')
        return;
    var locTextures = this._textures;
    if (locTextures[textureKeyName]) {
        locTextures[textureKeyName].releaseTexture();
        delete(locTextures[textureKeyName]);
    }
},

引擎在这一块的 bug 应该都已经修复了的,麻烦升级到 1.3.1B 试试!

我现在就是1.3.1-beta.1

我有个问题,如果我现在要释放图片,是不是掉用cc.loader.release(url)就可以删除内存了

我已测试N次,cc.loader.release(url)是删除不了内存的,你们还是排查下吧,1.3.1b一定有BUG

加载图片本来就不会加载什么 json,就是单单加载图片

1.3.1B 中,是的

麻烦 @panda 大大确认下!