动态加载Asset
cc.loader.loadRes:用来加载resource目录下的Asset(资源)
和cc.loader.load不同的是,loadRes每次只能加载一个Asset。调用时只需传入相对resource的路径即可,并且路径结尾处不能包含文件扩展名
只适用于应用包内的资源和热更新的本地资源。
加载指定类型的资源
同一个路径下同时包含了多个重名资源(例如同时包含 player.clip 和 player.psd),或者需要获取 “子资源”(例如获取 Texture2D 生成的 SpriteFrame),就需要声明类型。
例如:
var self = this;
cc.loader.loadRes("test assets/image",cc.SpriteFrame,function(err,spriteFrameOne){
self.node.getComponent(cc.Sprite).spriteFrame = spriteFrameOne
})
加载远程资源和设备资源
支持加载远程贴图资源,这需要开发者直接调用 cc.loader.load。同时,如果用户用其他方式下载了资源到本地设备存储中,也需要用同样的 API 来加载,
// 远程 url 带图片后缀名
var remoteUrl = "http://unknown.org/someres.png";
cc.loader.load(remoteUrl, function (err, texture) {
// Use texture to create sprite frame
});
// 远程 url 不带图片后缀名,此时必须指定远程图片文件的类型
remoteUrl = "http://unknown.org/emoji?id=124982374";
cc.loader.load({url: remoteUrl, type: 'png'}, function () {
// Use texture to create sprite frame
});
// 用绝对路径加载设备存储内的资源,比如相册
var absolutePath = "/dara/data/some/path/to/image.png"
cc.loader.load(absolutePath, function () {
// Use texture to create sprite frame
});
目前的此类手动资源加载还有一些限制,对用户影响比较大的是:
原生平台远程加载不支持图片文件以外类型的资源
这种加载方式只支持图片、声音、文本等原生资源类型,不支持 SpriteFrame、SpriteAtlas、Tilemap 等资源的直接加载和解析(需要后续版本中的 AssetBundle 支持)
资源加载的说明
在加载完资源之后,所有的资源都会临时被缓存到 cc.loader 中,以避免重复加载资源时发送无意义的 http 请求,