cocos 远程加载资源和常见使用


Creator 提供了 cc.loader.loadRes 这个 API 来专门加载那些位于 resources 目录下的 Asset。和 cc.loader.load 不同的是,loadRes 一次只能加载单个 Asset。调用时,你只要传入相对 resources 的路径即可,并且路径的结尾处 不能 包含文件扩展名。


单个资源加载

音效和音乐的播放控制

/**
 * [playEffect description]
 * @param  {[type]} filename [url]
 * @param  {[type]} boolean  [是否循环 true or false]
 * @param  {[type]} val      [音量]
 * @return {[type]}          [description]
 */
cc.playEffect=function(filename,boolean,val){
    if(parseInt(cc.sys.localStorage.getItem('effect')) == 1){
        cc.loader.loadRes('effect/'+filename,cc.AudioClip,function (err,clip){
            cc.audioEngine.play(clip,boolean,val);
        });
    }
},
/**
 * [playMusic description]
 * @param  {[type]} filename [url]
 * @param  {[type]} boolean  [是否循环 true or false]
 * @param  {[type]} val      [音量]
 * @return {[type]}          [description]
 */
cc.playMusic=function(filename,boolean,val){
    if(parseInt(cc.sys.localStorage.getItem('music')) == 1){
        cc.loader.loadRes('music/'+filename,cc.AudioClip,function (err,clip){
            cc.audioEngine.playMusic(clip,boolean);
            cc.audioEngine.setMusicVolume(val);
        });
    }
}

加载图片,图集,预制体

1.加载图片

// load the sprite frame of (project/assets/resources/imgs/cocos.png) from resources folder
    cc.loader.loadRes('Texture/brick_10', cc.SpriteFrame,(err, spriteFrame)=> {
        if (err) {
            cc.error(err.message || err);
            return;
        }
        this.node.getComponent(cc.Sprite).spriteFrame = spriteFrame;
    });

2.加载图集中的 SpriteFrame

// 加载 SpriteAtlas(图集),并且获取其中的一个 SpriteFrame
    // 注意 atlas 资源文件(plist)通常会和一个同名的图片文件(png)放在一个目录下, 所以需要在第二个参数指定资源类型
    cc.loader.loadRes("Texture/sheep", cc.SpriteAtlas,(err, atlas)=> {
        var frame = atlas.getSpriteFrame('sheep_down_0');
        sprite.spriteFrame = frame;
    });

3.加载预制体

 // 加载 Prefab
    cc.loader.loadRes("test assets/prefab", function (err, prefab) {
        var newNode = cc.instantiate(prefab);
        newNode.parent = parentNode; // 将生成的敌人加入节点树
    });

资源释放

loadRes 加载进来的单个资源如果需要释放,可以调用 cc.loader.releaseResreleaseRes 可以传入和 loadRes 相同的路径和类型参数。

cc.loader.releaseRes("test assets/image", cc.SpriteFrame);
cc.loader.releaseRes("test assets/anim");

此外,你也可以使用 cc.loader.releaseAsset 来释放特定的 Asset 实例。

cc.loader.releaseAsset(spriteFrame);

资源批量加载

cc.loader.loadResDir 可以加载相同路径下的多个资源:
    // 加载 test assets 目录下所有资源
    cc.loader.loadResDir("test assets", function (err, assets) {
        // ...
    });

    // 加载 test assets 目录下所有 SpriteFrame,并且获取它们的路径
    cc.loader.loadResDir("test assets", cc.SpriteFrame, function (err, assets, urls) {
        // ...
    });
    
    //cc.Gender表示文件名字
    cc.loader.loadResDir(cc.Gender, (err, res, url) => {
        for (let i = 0; i < res.length; i++) {
            cc.bsResMgr.add(url[i], res[i]);
        }
    });

加载远程资源和设备资源

在目前的 Cocos Creator 中,我们支持加载远程贴图资源,这对于加载用户头像等需要向服务器请求的贴图很友好,需要注意的是,这需要开发者直接调用 cc.loader.load。同时,如果用户用其他方式下载了资源到本地设备存储中,也需要用同样的 API 来加载,上文中的 loadRes 等 API 只适用于应用包内的资源和热更新的本地资源。下面是这个 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
    });

获取和加载资源API

你可能感兴趣的:(cocos 远程加载资源和常见使用)