使用代码来加载资源和释放资源

资源不只是可以通过编辑器绑定获取.

其实他还可以使用代码来动态加载.

cc.loader

1.它有3个默认的Pipeline(管道):

(1)assetLoader:主要用于加载资源,加载asset类型资源和释放这些资源

(2)downloader:主要用于下载文件,文本,图像,脚本,声音,字体,自定义的download

(3)loader:第三个是默认的Pipeline可以加载json,image,plist,fnt,uuid;

2.资源分为本地(assets目录下)和远程资源

3.加载分为同步和异步, cc.Loader加载资源是 异步的

本地资源加载

1在代码里加载资源必须要求资源放在assets/resources文件夹下

因为这是一种优化策略:根据场景的依赖关系来打包我们的资源

就是说你这个资源用到了,他才打包,如果没用到他就不打包.

这样能够节省资源,去掉无用的资源, 在代码里使用随时有可能去掉

他认为不用的资源,但是无法判断在代码里加载的资源是哪些,

所以使用一种方案,所有resources目录下的资源都会被打包进去.

所以资源你不在代码里加载的,不要放在resources目录下.

2加载的时候资源url不需要加assets/resources这个部分

3.cc.loader.loadRes(url,onComplete回调函数)

4.loadResArray([],type类型,progressCallback,completeCallback);

5.loadResDir(url[type][progressCallback][completeCallback])

他是加载一个路劲下的资源

6getRes(url,[type]); 获取资源id

加载播放一个声音mp3 第二个参数是加载完成的回调函数

加载完后在回调函数里进行播放即可.

    local_load: function(){
    //本地加载声音
    //第一个参数是url 不要后缀名
    cc.loader.loadRes("bgFight",function(err,prefab){
    if(err){
    //这里就是有错误发生
    console.log(err);
    return;
    }
    //这里就是没出错 并且输出他的信息
    console.log(prefab);
    //因为他是一个audio Clip
    this.audio.clip = prefab;
    //播放
    console.log("播放");
    this.audio.play();
    }.bind(this));
    },

加载图片

    local_load: function(){
    //和声音不同 这里要写加载的类型
    cc.loader.loadRes("texture/powered",cc.SpriteFrame,
    function(err,pre){
    //加载资源的回调函数
    if(err){
    //这里就是有错误发生
    console.log(err);
    return;
    }
    //否则这里就是spriteFrame对象
    console.log(pre);
    this.spr.spriteFrame = pre;
    }.bind(this));
    }

获取资源getRes 例如一个游戏,在进入下一个场景之前,有一个场景

加载资源,那么到了新的场景之后,我们就找到这个加载好的资源

远程资源加载

1 cc.loader.load(url,结束回调函数);

使用互联网上 或者远程部署的图片

2 cc.loader.load({url"",type""},结束回调函数);

3 远程加载任意类型文件

去百度一张图片  或者自己搭建一个web服务器

    //远程加载
    cc.loader.load("http://game.people.com.cn/NMediaFile/2015/1029/MAIN201510290900000533552743089.jpg"
    ,function(err,ret){
    //他没有type 他返回的是cc.Texture2D对象
    if(err){
    console.log(err);
    return;
    }
    //因为这个返回的是 cc.Texture2D的对象
    //所以需要调用这个设置一下
    this.spr.spriteFrame.setTexture(ret);
    }.bind(this));

  成功加载了但是他变得很小,如果想用原始大小呢

只需要设置精灵大小为这个 texture2D的大小即可 使用他默认大小

this.spr.node.setContentSize(ret.getContentSize())

从服务器加载一个mp3播放,有可能你的url没有后缀名,

使用第二种方法 ,就可以指定type啦,有后缀名也可以指定

    cc.loader.load({url: "http://127.0.0.1:8001/asdbp.mp3",type:"mp3"},
    function(err,ret){
    
    console.log("播放");
    this.audio.clip = ret;
    this.audio.play();
    }.bind(this));

加载json数据

cc.loader.load({url" ,
    function(err,ret){
        
        console.log(ret);
    }
)

就是说你想要什么类型 只要在type添加就行

cc.loader.load({url"http://127.0.0.1:8001/psonsetn.abced",type:"abced"} ,

资源卸载

1.每个场景有个自动释放资源,勾选上这个场景的资源会自动释放,

不勾选上这个场景的资源不释放.

还有个延时加载资源:他的作用是如果关闭,那这个场景间接或直接递归

依赖的所有资源都将被加载,全部加载后才会触发场景切换.

如果开启:

这个场景直接或间接依赖的所有贴图,粒子和声音都将被延迟到场景

切换后才加载,使场景加载速度极大提升,同时,玩家进入场景后可能会

看到一些资源陆续显示出来,并且激活,这种方式适合网页游戏.

注意,spine和TieldMap依赖的资源永远都不会被延迟加载.

2.代码加载的资源,默认是不会收这个选项的影响的,除非设置

setAutoRelease(url,bool)

使用这个 API 可以在单个资源上改变这个默认行为,

强制在切换场景时保留或者释放指定资源。

3.手动释放资源

loadRes/releaseRes

load/release

releaseAsset(资源对象的object)

我加载一个图片,异步加载好后 立刻释放, 然后5秒之后

在显示图片,他就显示不出来了,因为他被释放掉了

    local_load: function(){
    //和声音不同 这里要写加载的类型
    cc.loader.loadRes("texture/powered",cc.SpriteFrame,
    function(err,pre){
    //加载资源的回调函数
    if(err){
    //这里就是有错误发生
    console.log(err);
    return;
    }
    ////////////异步加载好后 立刻释放
    cc.loader.releaseRes("texture/powered",cc.SpriteFrame);
    
    //否则这里就是spriteFrame对象
    console.log(cc.loader.getRes("texture/powered"),cc.SpriteFrame);
    
    }.bind(this));
        this.scheduleOnce(function(){
    this.spr.spriteFrame = 
    cc.loader.getRes("texture/powered",cc.SpriteFrame);
    }.bind(this),5);

原文地址:http://blog.51cto.com/12158490/2066813

时间: 2024-10-07 06:25:00

使用代码来加载资源和释放资源的相关文章

unity3d Resources.Load动态加载资源

初步整理并且学习unity3d资源加载方法,预计用时两天完成入门学习 Unity3d常用两种加载资源方案:Resources.Load和AssetBundle Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源 而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的.其实场景里所有静态的对象也有这么一个加载过程,只是Unity后台替你自动完成 一:Resources.Load:使用这种方式加载资源,首先需要下Asset目录下创建

iOS和tvOS游戏按需加载资源简介

摘要 与iOS 9和watchOS 2一起,苹果引入了一套新的内容分发API,以便节约设备空间,这就是按需加载资源.通过使用按需加载资源,我们可以将特定的应用程序资源托管在苹果的服务器上,然后在需要的时候进行加载.在这个教程中,我将通过开发一个图片查看应用介绍一下按需加载资源的基本用法. tvOS On Demand Reourse 按需加载 iOS开发 目录[-] 介绍 准备工作 1. 按需加载资源 益处 类别 限制 应用分片 删除按需加载资源 2. 分配和指定Tag 3. 访问按需请求资源

java加载资源文件

className.class.getResourceAsStream 用法: 第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件config.properties 那么,应该有如下代码: //前面没有"/"代表当前类的目录 InputStream is1 = Test.class.getResourceAsStream("config.properties"); System.out.printl

关于unity 中使用AssetBundle加载资源,shader偶尔会丢失的问题解决办法

问题描述: 因为项目中要进行热更新设计,所以用unity官方推荐的打包方式assetbundle进行打包,打包好了以后再电脑上运行正常,但是当发布到android上后发现偶尔场景背景会出现空白,多方查找,发现unity存在使用assetbundle加载资源会丢失shader的问题.网上找了一些解决方式,测试可用,分享出来. 方案一:(亲测可用) 第一步,在将用到的Shader加到Editor->Graphics Settings的Shader列表里再进行打包(依赖打包) 第二步,在代码中给sha

coco2d-x实现Loading界面预加载资源

首先我们定义2个c++文件,一个是loadingScene.h, loadingScene.cpp 首先我们在.h里面我们定义我们的办法 #include"cocos2d.h" using namespace cocos2d; class loadingScene:public Layer { public: int nuberOfLoadedRes;//记录当前的进度 CREATE_FUNC(loadingScene); bool init(); static Scene *crea

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首先我们知道32位汇编是可以调用Windows API的,那么今天我们就调用windowsAPI来写一个窗口程序 如果你有windows开发知识,那么就很理解了,如果没有,那么跟着我写,跟着步骤去写,那么也可以写出来 首先我们要编写一个窗口程序(使用SDKAPI编写)有几个步骤 1.设计窗口类 2.注

cocos2d-x addImageAsync()异步加载资源成功之后的场景跳转问题

http://blog.csdn.net/w20175357/article/details/23546985 1.先说说addImageAsync()异步加载图片的问题 做游戏的时候现在资源的比较大,所有我们必然会有一个loading界面,而我在找写loading界面的方法的时候,发现了2种方法.       一种是自己创建一个线程,再在这个线程里面加载资源,不过由于openGL的限制,只能在主线程里面绘制UI,不过有的人也想出了其他的方法,就是先只缓存,再在主线程里面绘制.这里有这方面的教程

ASP.NET自定义控件加载资源WebResource问题

最近项目用日期控件,想把My97的资源文件跟TextBox封装成一个DatePicker控件,其实很简单的意见事情,但是还是用了一天多的时间,主要的问题就是解决资源文件加载的问题.通过一天多的努力,得出下面的结论: 1.自定义控件中,一般只要加载JS文件,但是所有的资源文件都需要在AssemblyInfo.cs中注册.具体方式如下: 1.1.控件中注册JS文件代码: /// <summary> /// 注册JS /// </summary> /// <param name=&

[转]预加载资源研究

原文: http://www.otakustay.com/prefetch-resource/ 什么是预加载 所谓预加载,就是通过一定的编程方法,使浏览器在空间的时候,在后台通过HTTP请求访问某些资源.当用户在一段时间后真正使用这些资源的时候,相比一个完整的(返回200)的请求,可以更快地获得这些资源(返回304或者直接命中浏览器缓存). 预加载在部分情况下有着十分重要的意义,特别是当确定某些资源用户在短时间内会使用,如分页列表的上一页和下一页.以及一些常用的LOGO之类的图片等. 预加载资源