16.cc.Loader使用详解
1. cc.loader
有三个默认的Pipeline:
(1) assetLoader: 主要用于加载资源, 加载asset类型资源,和释放这些资源;
(2) downloader: 主要用于下载文件, 文本,图像,脚本,声音,字体, 自定义的download;
(3) loader: 第三个默认的Pipeline,可以加载json, image, plist, fnt, uuid;
资源分为本地(assets目录下)与远程资源;
加载异步的;
2. 本地资源加载
在代码里面加载资源必须要求资源在assets/resources/文件夹下;
(1)根据场景的依赖关系来打包我们的资源; 去掉不用的资源
(2)无法判断在代码里面加载的资源,是哪些?-->所有的resources目录下的资源,都会被打包进去,你在代码里面就能加载到它了;
如果资源不在代码里面加载,一般不要放到resources目录下 ,如果放到了,这个资源不关你有没有用,都会被打包进去;
资源的url不需要加assets/resources这个部分,路劲不需要加这个前缀;
cc.loader.loadRes(url, onComplete回掉函数);
loadResArray([], type类型, progressCallback, completeCallback);
loadResDir (url [type ] [progressCallback ] [completeCallback ]) 加载一个路径下的资源;
getRes(url, [type]); 获取资源id;
3. 远程资源加载
cc.loader.load(url, 结束回掉函数);
cc.loader.load({url: “”, type: “”}, 结束回掉函数);
远程加载任意类型文件;
4. 资源卸载
每个场景有个自动释放资源
勾选上这个场景的资源会自动释放,不勾选上这个场景的资源不释放
代码加载的资源,默认是不会受这个选项的影响的,除非设置
cc.loader.setAutoRelease(url, brealse)
手动释放资源
loadRes/ releaseRes
load / release
releaseAsset (资源对象的object);
代码示例: game_scene.js
// Learn cc.Class:
// - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/class.html
// - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/class.html
// Learn Attribute:
// - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
// - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
// - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
// - [English] https://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html
cc.Class({
extends: cc.Component,
properties: {
// foo: {
// // ATTRIBUTES:
// default: null, // The default value will be used only when the component attaching
// // to a node for the first time
// type: cc.SpriteFrame, // optional, default is typeof default
// serializable: true, // optional, default is true
// },
// bar: {
// get () {
// return this._bar;
// },
// set (value) {
// this._bar = value;
// }
// },
audio: {
default: null,
type: cc.AudioSource,
},
sprite: {
default: null,
type: cc.Sprite,
},
},
// LIFE-CYCLE CALLBACKS:
// onLoad () {},
/**
* 加载本地资源
*/
local_load() {
//本地加载声音
cc.loader.loadRes("bg", function(err, ret) {
if(err) {
console.log(err);
return;
}
console.log(ret); //audio clip
this.audio.clip = ret;
this.audio.play();
}.bind(this));
//end
//本地加载图片
cc.loader.loadRes("img/disk", cc.SpriteFrame, function(err, ret) {
if(err){
console.log(err);
return;
}
//spriteFrame对象
console.log(ret);
// this.sprite.spriteFrame = ret;
//例如游戏中在进入下个场景之前,有一个资源想载入场景,到了新场景后就可以找到这个加载好的资源
this.sprite.spriteFrame = cc.loader.getRes("img/disk", cc.SpriteFrame);;
}.bind(this));
//end
},
/**
* 加载远程资源
*/
remote_load() {
//远程加载图片
// cc.loader.load("http://127.0.0.1:8080/xxx.png", function(err, ret) {
// if(err){
// console.log(err);
// return;
// }
// //ret is cc.Texture2D对象
// this.sprite.spriteFrame.setTexture(ret);
// this.sprite.node.setContentSize(ret.getContentSize());
// }.bind(this));
//end
//从服务器加载mp3
// cc.loader.load({url: "http://127.0.0.1:8080/xxx.mp3", type: "mp3"}, function(err, ret) {
// if(err) {
// console.log(err);
// return;
// }
// console.log(ret); //audio clip
// this.audio.clip = ret;
// this.audio.play();
// }.bind(this));
//end
//从服务器加载json文件
// cc.loader.load({url: "http://127.0.0.1:8080/xxx.json", type: "json"}, function(err, ret) {
// if(err) {
// console.log(err);
// return;
// }
// console.log(ret); //audio clip
// }.bind(this));
//end
//从服务器加载自定义文件
// cc.loader.load({url: "http://127.0.0.1:8080/xxx.mydata", type: "mydata"}, function(err, ret) {
// if(err) {
// console.log(err);
// return;
// }
// console.log(ret); //audio clip
// }.bind(this));
//end
},
start () {
this.local_load();
},
// update (dt) {},
});
工程截图: