cocos游戏开发resources.load动态加载部分问题总结

 0 0条评论

首先,所有需要动态加载的资源必须放在assets/resources文件夹下。一开始我把所有资源,图片、音频等都放到此目录下了,图个方便,后来看官网发现一个重要的提示。

如果一份资源仅仅是被 resources中的其它资源所依赖,而不需要直接被 resources.load调用,那么请不要放在 resources 文件夹中。否则会增大 config.json的大小,并且项目中无用的资源,将无法在构建的过程中自动剔除。同时在构建过程中,JSON 的自动合并策略也将受到影响,无法尽可能合并零碎的 JSON。

项目中,我真正动态调用的资源,是非常少的。之后我做了一个很简单的操作,把resources文件夹名字重命名为myresources。然后再新建一个resources文件夹,放真正需要动态加载的资源。原以为就是那么简单,之后操作中,发现每次resources.load的内容,只能读取原来(即当前myresources)的文件夹的内容,重启项目也没办法解决。后来找到方法了。打开资源管理器,看到以下两个meta后缀的文件。


删除这两个文件,然后重启项目,之后就能正确从resources文件夹读取了。

之后说一下,动态更改SpriteFrame,这我可是踩了一个大坑,又白白浪费了几个小时。只能怪官网说的太不清晰了。

图片设置为 sprite-frame 或 texture 或其他图片类型后,将会在资源管理器中生成一个对应类型的资源。但如果直接加载 

test_assets/image,得到的类型将会是ImageAsset。你必须指定路径到具体的子资源,才能加载到图片生成的SpriteFrame

对于一个初学者来说,官方这段话并不是理解,例子也非常容易引起误会。

// 加载 SpriteFrame,image 是 ImageAsset,spriteFrame 是 image/spriteFrame,texture 是 image/texture
resources.load("test_assets/image/spriteFrame", SpriteFrame, (err, spriteFrame) => {
    this.node.getComponent(Sprite).spriteFrame = spriteFrame;
});


项目中有cuo和dui两个图片,我之前的代码是:

 resources.load('images/dui', SpriteFrame, (err, spriteFrame) => {
    ////
    });

无奈报错,原始需要在url中在加上dui/spriteFrame才能正确加载。

初学者踩坑记录一下。

本文作者:双黑

版权声明:本站文章欢迎链接分享,禁止全文转载!

游客