将它添加到场景后,属性检查器里是这样的:
接下来我们从资源管理器里面分别将一张贴图和一个 SpriteFrame 拖到属性检查器的对应属性中:
结果如下:
这样就能在脚本里直接拿到设置好的资源:
onLoad: function () {
var spriteFrame = this.spriteFrame;
var textureURL = this.textureURL;
spriteFrame.setTexture(textureURL);
}
在属性检查器里设置资源虽然很直观,但资源只能在场景里预先设好,没办法动态切换。如果需要动态切换,你需要看看下面的内容。
动态加载所有需要通过脚本动态加载的资源,都必须放置在resources
文件夹或它的子文件夹下。resources
需要在 assets 文件夹中手工创建,并且必须位于 assets 的根目录,就像这样:
这里的image/image
,0.0392157); border-radius: 3px;">prefab,0.0392157); border-radius: 3px;">anim,0.0392157); border-radius: 3px;">font都是常见的 Asset,而 image,audio 则是常见的 Raw Asset。
resources
文件夹里面的资源,可以关联依赖到文件夹外部的其它资源,同样也可以被外部场景或资源引用到。项目构建时,除了已在构建发布面板勾选的场景外,resources
文件夹里面的所有资源,连同它们关联依赖的resources
文件夹外部的资源,都会被导出。所以如果一份资源不需要由脚本直接动态加载,那么不用放在resources
文件夹里。
动态加载 AssetCreator 提供了cc.loader.loadRes
这个 API 来专门加载那些位于 resources 目录下的 Asset。和cc.loader.load
不同的是,loadRes 一次只能加载单个 Asset。调用时,你只要传入相对 resources 的路径即可,并且路径的结尾处不能包含文件扩展名。
// 加载 Prefab
cc.loader.loadRes("test assets/prefab",function (err,prefab) {
var newNode = cc.instantiate(prefab);
cc.director.getScene().addChild(newNode);
});
var self = this;
cc.loader.loadRes("test assets/anim",clip) {
self.node.getComponent(cc.Animation).addClip(clip,"anim");
});
cc.loader.loadRes("test assets/sheep",cc.SpriteAtlas,atlas) {
var frame = atlas.getSpriteFrame('sheep_down_0');
sprite.spriteFrame = frame;
});
加载独立的 SpriteFrame
图片设置为 Sprite 后,将会在资源管理器中生成一个对应的 SpriteFrame。但如果直接加载test assets/image
,得到的类型将会是 cc.Texture2D。你必须指定第二个参数为资源的类型,才能加载到图片生成的 cc.SpriteFrame:
// 加载 SpriteFrame
"test assets/image",cc.SpriteFrame,spriteFrame) {
self.node.getComponent(cc.Sprite).spriteFrame = spriteFrame;
});
如果指定了类型参数,就会在路径下查找指定类型的资源。当你在同一个路径下同时包含了多个重名资源(例如同时包含 player.clip 和 player.psd),或者需要获取“子资源”(例如获取 Texture2D 生成的 SpriteFrame),就需要声明类型。
资源释放loadRes
加载进来的单个资源如果需要释放,可以调用cc.loader.releaseRes
,releaseRes
只能传入一个和loadRes
相同的路径,不支持类型参数。
cc.loader.releaseRes("test assets/anim");
此外,你也可以使用cc.loader.releaseAsset
来释放一个具体的 Asset 实例。
cc.loader.releaseAsset(spriteFrame);
动态加载 Raw AssetRaw Asset 可以直接使用 url 从远程服务器上加载,也可以从项目中动态加载。对远程加载而言,原先 Cocos2d 的加载方式不变,使用 cc.loader.load 即可。对项目里的 Raw Asset,加载方式和 Asset 一样:
// 加载 Texture,不需要后缀名
cc.loader.loadRes(cc.url.rawRaw Asset 加载成功后,如果需要传给一些 url 形式的 API,还是需要给出完整路径才行。你需要用cc.url.raw
进行一次 url 的转换:
// 原 url 会报错!文件找不到
var texture = cc.textureCache.addImage("resources/test assets/image.png");
var realUrl = cc.url.raw("resources/test assets/image.png");
var texture = cc.textureCache.addImage(realUrl);
资源批量加载cc.loader.loadResAll可以加载相同路径下的多个资源:
cc.loader.loadResAll("test assets",assets) {
});
cc.loader.loadResAll(// assets 是一个 SpriteFrame 数组,已经包含了图集中的所有 SpriteFrame。
});
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!