图片渐进式资源加载可以实现吗

cocos creator 2.4.x

想实现默认下载低清图,低清图加载完成后,再去下载高清图,并使用高清图替换低清图。
通过 cc.assetManager.downloader.register 和 cc.assetManager.parser.register 去实现前置下载步骤已经完成。
但是现在不能替换已经加载好的低清图。
cc.assetManager.parser.register 处理后,回调函数会内部清空,无法再次调用。
如果是通过 cc.assetManager.assets 去查找并替换也有很大的问题。主要是 Texture2D 似乎没有办法去重复替换成新的 WebGLTexture ?

求教。感谢!!~~~~~

我实现思路是
低清图打包在默认的resources目录
高清资源做一个远程bundle

游戏开始/读取特定资源的时候的时候检查远程bundle是否ready, 没有就直接本地, 有了就用高清包里面的

对打包好的图集, 资源不多的情况下很简单
如果全是碎图可能要自己拼一下url

现在采用的是全碎图自己拼url的方式来实现下载的。
低清图下载后再下载高清图已经实现了。

现在的问题是没有办法将已经下载好的低清图替换为高清图。

我是在装载图片之前检查一下分开装载不同包里面的图, 如果路径有规范的话可以拼一下前缀.

碎图不知道这么做会不会很麻烦

嗯嗯~你这样做肯定是很好的,但是现在是修改已有项目,分包的话,现在的可能不太可行。
所以想说用碎图拼 url 的方式。只是现在下载一次图之后,再次下载并替换 texture 引用会显示不正常。不清楚引擎是否留有这个口子

1赞

解决了,本来以为要替换所有的 SpriteFrame和Spine所引用的资源,结果发现,啊~原来只替换 Texture2D 的资源之后,SpriteFrame和Spine所引用的就全部都修改了。引用关系搞错了。

具体做法就是下载好小图后,在适当时机下载大图,然后遍历 cc.assetManager.assets 通过 uuid 或 url 找到对应资源用 initWithElement 去替换资源就可以了。

1赞

感谢分享!! mark