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 *createScene();

void loadingResource();//加载资源

void loadingCallBack(Texture2D*obj);//加载资源的回调

void update(float t);

};

定义好了.H,然后我们去实现这些方法

在.CPP里面。因为我的资源是从cocostudio里面制作的

所以我们这里就实现怎么把cocostudio制作的东西拿到cocos2d里怎么来用他

#include"loadingScene.h

#include"cocostudio/cocostudio.h"

#include"SimpleAudioEngie.h"  //这里是定义声音的头文件

using namespace CocosDenshion //这里是定义声音的头文件

using namespace cocostudio;

Scene *loadingScene::createScene()

{

auto scene=Scene::create();

auto layer=loadingScene::create();

scene->addChild(layer);

return scene;

}

bool loadingScene::init()

{

if(!Layer::init())

{

return false;

}

//显示场景编辑器做好的场景

auto node=SceneReader::getInstance()->createNodeWithSceneFile("

publish/LoadingScene.json //要加载场景

")

node->setTag(1000);

this->addChild(node);

//先设置进度条

Node *nodeScene=this->getChildByTag(1000);//场景根节点

comRender *render=(comRender*)(nodeScene->getChildByTag(10003))->getComponent("GUIComponent"));

Widget *widget=(cocos2d::ui::Widget*)(render->getNode());//得到UI层的根节点

loading *progressBar=(loadingBar*)(widget->getChildByTag(7));

progressBar->setPercent(0);

下面我们需要去实现在.H里面的加载资源的方法 ,然后我们在init()方法里面实现一下

//实现资源的加载

this->numberOfLoadedRes=0;//先初始化我们要加载的资源为0

loadingScene::LoadingResource();

this->scheduleUpdate();

return true;

}

void  LoadingScene::LoadingResource()

{

SimpleAudioEngine::getInstance()->preloadBackgroundMusic(FileUtils::getInstance->

fullPathForFilenmae("需要加入的游戏音乐的名字".c_str());

numberOfLoadedRes++;

//加载所有的图片帧

spriteFrameCache::getInstance()->addSpriteFramesWithFile("加入plist文件");

numberOfLoadedRes++;

//  纹理缓存--所有的图片都可以放到纹理缓存中

Director::getInstance()->getTextureCache()->addImageAsync("需要加入的图片",

CC_CALLBACK_1(loadingScene::loadingCallBack,this));

}

//加载资源的回调

void loadingScene::LoadingCallBack(Texture2D * obj)

{

numberOfLoadedRes++

这里我们用log打出我们加载的资源有没有成功

log("资源加载:%d",numberOfLoadedRes);

}

这里我们更新下我们的进度条

void loadingScene::update(float t)

{

float percent=(float)numberOfLoadedRes/(有多少资源)*100;

Node *nodeScene=this->getChildByTag(1000);//场景的根节点

ComRender * render=(ComRender*)(nodeScene->getChildByTag(10003)->

getComponent("GUIComponent"));

Widget *widget=(cocos2d::ui::Widget*)(render->getNode());

loadingBar *progressBar=(LoadingBar*)(widget->getChildByTag(7));

progressBar->setPercent(percent);

if(numberOfLoadedRes==(有多少资源))

{

这里就写你下载资源之后是跳转场景呢还是干什么

}

}

忘记了告诉大家,上面那些Tag里面的数字,要是代码里面没有setTag的,那些Tag都cocostudio里面对象物体的标签 。

时间: 2024-08-09 18:31:46

coco2d-x实现Loading界面预加载资源的相关文章

cocos2dx loading界面 预加载资源 与 资源释放

预加载图片: 1.CCTextureCache::sharedTextureCache()->addImage("icon.png"); 2.CCTextureCache::sharedTextureCache()->addImageAsync("icon.png",this,callfuncO_selector(MainLayerLoading::loadingCallBack)); 使用加载的缓存图片: CCSprite* sp =CCSprite:

Android应用程序UI硬件加速渲染的预加载资源地图集服务(Asset Atlas Service)分析

我们知道,Android系统在启动的时候,会对一些系统资源进行预加载.这样不仅使得应用程序在需要时可以快速地访问这些资源,还使得这些资源能够在不同应用程序之间进行共享.在硬件加速渲染环境中,这些预加载资源还有进一步优化的空间.Android系统提供了一个地图集服务,负责将预加载资源合成为一个纹理上传到GPU去,并且能够在所有的应用程序之间进行共享.本文就详细分析这个预加载资源地图集服务的实现原理. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 资源预加载

[转]预加载资源研究

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

手把手教你构建 Android WebView 的缓存机制 & 资源预加载方案

前言 由于H5具备 开发周期短.灵活性好 的特点,所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发 但我知道你一定在烦恼 Android Webview 的性能问题,特别突出的是:加载速度慢 & 消耗流量 今天,我将针对 Android Webview 的性能问题,提出一些有效解决方案. 目录 1. Android WebView 存在什么性能问题? Android WebView 里 H5 页面加载速度慢 耗费流量 下面会详细介绍. 1.

详解HTML5中rel属性的prefetch预加载功能使用

在HTML5中,有个很有用但常被忽略的特性,就是预先加载(prefetch),它的原理是: 利用浏览器的空闲时间去先下载用户指定需要的内容,然后缓存起来,这样用户下次加载时,就直接从缓存中取出来,效率就快了. 举个例子说明:比如要预先加载某个页面,可以这样: XML/HTML Code <link rel="prefetch" href="http://www.example.com/"> <!-- Firefox --> 但如果是googl

前端资源预加载并展示进度条

我们经常会看到,一些站点在首次进入的时候会先显示一个进度条,等资源加载完毕后再呈现页面,大概像这样: 然后整个页面的操作就会非常流畅,因为之后没必要再等待加载资源了.尤其是在移动端,或者是页游中,这样做能避免页面出现白屏(等待加载图片),很大程度提升用户体验.那这种技术是如何实现的呢?其实非常简单,本文就来从基础细节探究一番. 为什么需要资源预加载 大多时候,我们的页面并不是一次渲染完毕的,而是随着用户的操作,不断修改DOM节点,如果你动态插入了一个图片节点,那么浏览器要马上发一个http请求,

HTML5 prefetch即预加载

原文地址 声明:此文带着自己的理解,不完全按原文翻译 prefetch 即预加载,在用户需要前我们就将所需的资源加载完毕. 有了浏览器缓存,为何还需要预加载? 用户可能是第一次访问网站,此时还无缓存 用户可能清空了缓存 缓存可能已经过期,资源将重新加载 用户访问的缓存文件可能不是最新的,需要重新加载 Chrome 的预加载技术 现在的 chrome 聪明到根据你的浏览记录,预测到你可能访问或搜索哪些网站,在你打开网站之前就加载好了一些资源了.举个栗子,当你在搜索框输入 "amaz" 时

Java 并发专题 :FutureTask 实现预加载数据 在线看电子书、浏览器浏览网页等

继续并发专题~ FutureTask 有点类似Runnable,都可以通过Thread来启动,不过FutureTask可以返回执行完毕的数据,并且FutureTask的get方法支持阻塞. 由于:FutureTask可以返回执行完毕的数据,并且FutureTask的get方法支持阻塞这两个特性,我们可以用来预先加载一些可能用到资源,然后要用的时候,调用get方法获取(如果资源加载完,直接返回:否则继续等待其加载完成). 下面通过两个例子来介绍下: 1.使用FutureTask来预加载稍后要用的的

[转]资源预加载

资源预加载可以提升用户体验,如果每次用户打开页面都要加载图片,js,css等资源,会影响用户体验.资源预加载可以一定程度上改善这种情况. 我们可以做的是,但第一个页面load完的时候,在用户阅读网页的空隙,把下一个页面所用的资源提前加载过来cache住,这样下个页面就直接读缓存资源了,这样可以一定程度改善用户体验. 那么预加载资源需要解决的主要问题是JS加载过来不会被直接执行,css加载过来不会更改页面样式. 这样就会产生很多方案, 这里介绍一种不错的兼容方案: 1. IE下用new Image