Cocos Creator 获取和加载资源(摘自官方文档)
获取和加载资源Cocos Creator 有一套统一的资源管理机制 ,在本篇教程,我们将介绍
资源的分类目前的资源分成两种,一种叫做Asset,一种叫做Raw Asset。 Asset Creator 提供了名为 "Asset" 的资源类型,
因此只要你拿到了一个 Asset 对象,这个对象一定是已经加载结束的,可以直接通过对象上的属性访问到资源的所有数据。当你要在引擎中使用这些资源,引擎的 API 接收的都必须是一个加载好的 Asset 对象。 脚本中可以这样定义一个 Asset 属性: // NewScript.js
cc.Class({
extends: cc.Component,properties: {
spriteFrame: {
default: null,type: cc.SpriteFrame
},}
});
Raw Asset 为了兼容 Cocos2d 的一些既有 API,我们把保留原始资源文件扩展名资源叫做 "Raw Asset"。图片( 当你在脚本里声明一个类型是 cc.Class({
extends: cc.Component,properties: {
textureURL: {
default: null,type: cc.Texture2D
}
}
});
这样写的问题在于,在代码中 default: "",url: cc.Texture2D
}
}
});
如何在属性检查器里设置资源不论是 Asset 还是 Raw Asset,只要在脚本中定义好类型,就能直接在属性检查器很方便地设置资源。假设我们有这样一个组件: default: null,}
});
将它添加到场景后,属性检查器里是这样的:
接下来我们从资源管理器里面分别将一张贴图和一个 SpriteFrame 拖到属性检查器的对应属性中: 结果如下: 这样就能在脚本里直接拿到设置好的资源: onLoad: function () {
var spriteFrame = this.spriteFrame;
var textureURL = this.textureURL;
spriteFrame.setTexture(textureURL);
}
在属性检查器里设置资源虽然很直观,但资源只能在场景里预先设好,没办法动态切换。如果需要动态切换,你需要看看下面的内容。 动态加载 所有需要通过脚本动态加载的资源,都必须放置在 这里的
动态加载 Asset Creator 提供了 // 加载 Prefab
cc.loader.loadRes("test assets/prefab",function (err,prefab) {
var newNode = cc.instantiate(prefab);
cc.director.getScene().addChild(newNode);
});
// 加载 AnimationClip
cc.loader.loadRes("test assets/anim",clip) {
myNode.getComponent(cc.Animation).addClip(clip,"anim");
});
// 加载 SpriteAtlas(图集),并且获取其中的一个 SpriteFrame
// 注意 atlas 资源文件(plist)通常会和一个同名的图片文件(png)放在一个目录下,所以需要在第二个参数指定资源类型
cc.loader.loadRes("test assets/sheep",cc.SpriteAtlas,atlas) {
var frame = atlas.getSpriteFrame('sheep_down_0');
sprite.spriteFrame = frame;
});
加载独立的 SpriteFrame 图片设置为 Sprite 后,将会在资源管理器中生成一个对应的 SpriteFrame。但如果直接加载 // 加载 SpriteFrame
cc.loader.loadRes("test assets/image",cc.SpriteFrame,spriteFrame) {
myNode.getComponent(cc.Sprite).spriteFrame = spriteFrame;
});
资源释放 cc.loader.releaseRes("test assets/anim");
此外,你也可以使用 cc.loader.releaseAsset(spriteFrame); 动态加载 Raw AssetRaw Asset 可以直接使用 url 从远程服务器上加载,也可以从项目中动态加载。对远程加载而言,原先 Cocos2d 的加载方式不变,使用 cc.loader.load 即可。对项目里的 Raw Asset,加载方式和 Asset 一样: // 加载 Texture,不需要后缀名
cc.loader.loadRes( cc.url.raw
资源批量加载cc.loader.loadResAll可以加载相同路径下的多个资源: // 加载 test assets 目录下所有资源
cc.loader.loadResAll("test assets",assets) {
// ...
});
// 加载 sheep.plist 图集中的所有 SpriteFrame
cc.loader.loadResAll(// assets 是一个 SpriteFrame 数组,已经包含了图集中的所有 SpriteFrame。
// 而 loadRes('test assets/sheep',function (err,atlas) {...}) 获得的则是整个 SpriteAtlas 对象。
}); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |