在游戏开发中有些资源需要预先加载在内存中这样方便我们在以后的使用。从而加快游戏的速度。特别 是预先从网络上下载资源的更需要一个友好的界面来告诉用户程序正在加载中。这个时候就需要我们做一个loading 界面
废话不多说下面开始讲解思路
1 当加载图片的时候使用 CCTextureCache::sharedTextureCache()->addImageAsync("gmbg/longding.png",this,callfuncO_selector(LoadingLayer::loadCallBack));
这个方法 其中 loadCallBack 是回调函数 当然在使用网络加载图片资源的时候 回调方法也设置成这个 就OK
2 加载特效使用的 是cocos2d-x 中进度条
部分代码如下
- // 添加进度条
- CCSprite* loadimg=CCSprite::create("gmbg/longding.png");
- CC_BREAK_IF(!loadimg);
- CCProgressTimer* pt = CCProgressTimer::create(loadimg);
- pt->setType(kCCProgressTimerTypeBar);// 设置成横向的
- //可以看作是按矩形显示效果的进度条类型
- pt->setMidpoint(ccp(0,0));
- // 用来设定进度条横向前进的方向从左向右或是从右向左
- pt->setBarChangeRate(ccp(1,0));
- //重新设置锚点
- float tex=getWinSize().width/2+getWinOrigin().x;
- float tey=getWinSize().height/5+getWinOrigin().y-5;
- pt->setPosition(ccp(tex,tey));
- pt->setPercentage(0);
- this->addChild(pt,2,1);
// 添加进度条 CCSprite* loadimg=CCSprite::create("gmbg/longding.png"); CC_BREAK_IF(!loadimg); CCProgressTimer* pt = CCProgressTimer::create(loadimg); pt->setType(kCCProgressTimerTypeBar);// 设置成横向的 //可以看作是按矩形显示效果的进度条类型 pt->setMidpoint(ccp(0,0)); // 用来设定进度条横向前进的方向从左向右或是从右向左 pt->setBarChangeRate(ccp(1,0)); //重新设置锚点 float tex=getWinSize().width/2+getWinOrigin().x; float tey=getWinSize().height/5+getWinOrigin().y-5; pt->setPosition(ccp(tex,tey)); pt->setPercentage(0); this->addChild(pt,2,1);
上面两点是主要的技术点 可以看做是鲜花不过在美的鲜花也需要 绿叶的衬托 对于一些别的 准备工作 就可以看做是 绿叶 这个是loadingLayer 类的生命
- #ifndef __LOADING_LAYER_H__
- #define __LOADING_LAYER_H__
- #include "BaseLayer.h"
- class LoadingLayer:public BaseLayer{
- public:
- virtualbool init();
- CREATE_FUNC(LoadingLayer);
- static cocos2d::CCScene* scene();
- void loadCallBack(cocos2d::CCObject* ped);// 异步加载图片时 的回调函数
- LoadingLayer();
- private:
- int loadingNum;//用来记录当前的加载图片的数量
- int totalNum;// 一共要加载的图片数量
- bool setUpdateView();// 用来初始化页面的 基本的纹理
- };
- #endif
#ifndef __LOADING_LAYER_H__ #define __LOADING_LAYER_H__ #include "BaseLayer.h" class LoadingLayer:public BaseLayer{ public: virtual bool init(); CREATE_FUNC(LoadingLayer); static cocos2d::CCScene* scene(); void loadCallBack(cocos2d::CCObject* ped);// 异步加载图片时 的回调函数 LoadingLayer(); private: int loadingNum;//用来记录当前的加载图片的数量 int totalNum;// 一共要加载的图片数量 bool setUpdateView();// 用来初始化页面的 基本的纹理 }; #endif
下面在贴出init 方法
- bool LoadingLayer::init(){
- bool isRet=false;
- do
- {
- CC_BREAK_IF(!BaseLayer::init());
- CC_BREAK_IF(!this->setUpdateView());
- CCTextureCache::sharedTextureCache()->addImageAsync("gmbg/longding.png",this,callfuncO_selector(LoadingLayer::loadCallBack));
- isRet=true;
- } while (0);
- return isRet;
- }
bool LoadingLayer::init(){ bool isRet=false; do { CC_BREAK_IF(!BaseLayer::init()); CC_BREAK_IF(!this->setUpdateView()); CCTextureCache::sharedTextureCache()->addImageAsync("gmbg/longding.png",this,callfuncO_selector(LoadingLayer::loadCallBack)); isRet=true; } while (0); return isRet; }
由于本人 不喜欢在 init 方法中写 很多 初始化的东西 所以本人 定义了一个 setUpdateView 的方法 本人写代码习惯把代码封装成一小块 一小块 这纯属个人爱好 下面贴出里面的代码
- bool isRet=false;
- do
- {
- // 设置进度条的背景图片 我们把他放到屏幕下方的1/5处
- CCSprite* loadbackimg=CCSprite::create("gmbg/lodingbg.png");
- CC_BREAK_IF(!loadbackimg);
- loadbackimg->setPosition(ccp(getWinSize().width/2+getWinOrigin().x,getWinSize().height/5+getWinOrigin().y));
- this->addChild(loadbackimg,1);
- // 添加进度条
- CCSprite* loadimg=CCSprite::create("gmbg/longding.png");
- CC_BREAK_IF(!loadimg);
- CCProgressTimer* pt = CCProgressTimer::create(loadimg);
- pt->setType(kCCProgressTimerTypeBar);// 设置成横向的
- //可以看作是按矩形显示效果的进度条类型
- pt->setMidpoint(ccp(0,0));
- // 用来设定进度条横向前进的方向从左向右或是从右向左
- pt->setBarChangeRate(ccp(1,0));
- //重新设置坐标
- float tex=getWinSize().width/2+getWinOrigin().x;
- float tey=getWinSize().height/5+getWinOrigin().y-5;
- pt->setPosition(ccp(tex,tey));
- pt->setPercentage(0);
- this->addChild(pt,2,1);
- isRet=true;
- } while (0);
- return isRet;
bool isRet=false; do { // 设置进度条的背景图片 我们把他放到屏幕下方的1/5处 CCSprite* loadbackimg=CCSprite::create("gmbg/lodingbg.png"); CC_BREAK_IF(!loadbackimg); loadbackimg->setPosition(ccp(getWinSize().width/2+getWinOrigin().x,getWinSize().height/5+getWinOrigin().y)); this->addChild(loadbackimg,1); // 添加进度条 CCSprite* loadimg=CCSprite::create("gmbg/longding.png"); CC_BREAK_IF(!loadimg); CCProgressTimer* pt = CCProgressTimer::create(loadimg); pt->setType(kCCProgressTimerTypeBar);// 设置成横向的 //可以看作是按矩形显示效果的进度条类型 pt->setMidpoint(ccp(0,0)); // 用来设定进度条横向前进的方向从左向右或是从右向左 pt->setBarChangeRate(ccp(1,0)); //重新设置坐标 float tex=getWinSize().width/2+getWinOrigin().x; float tey=getWinSize().height/5+getWinOrigin().y-5; pt->setPosition(ccp(tex,tey)); pt->setPercentage(0); this->addChild(pt,2,1); isRet=true; } while (0); return isRet;
回调函数的主要代码
- void LoadingLayer::loadCallBack(CCObject* ped){
- loadingNum++;
- CCProgressTimer* pt=(CCProgressTimer*)this->getChildByTag(1);
- float now=pt->getPercentage();
- pt->setPercentage(100/totalNum+now);
- if(loadingNum<totalNum){
- }else{
- // 加载完的时候跳转到响应的界面
- CCLOG("loading over");
- }
- }
void LoadingLayer::loadCallBack(CCObject* ped){ loadingNum++; CCProgressTimer* pt=(CCProgressTimer*)this->getChildByTag(1); float now=pt->getPercentage(); pt->setPercentage(100/totalNum+now); if(loadingNum<totalNum){ }else{ // 加载完的时候跳转到响应的界面 CCLOG("loading over"); } }
对于以上代码特别要主要 不要忽略两个特别重要的属性 那就是 loadingNum 和 totalNum 在执行 这个loading 界面的 这两个参数一定要初始化。 特别是对于 totalNum 这个参数 就是你要加载的图片的 个数
程序写到这里 基本就完成了一个简答的 loading 界面 收工 下面贴出 运行出来的界面
看完上面的代码有些同学可能会疑惑为什么我的 LoadingLayer 继承了 BaseLayer 其实BaseLayer 继承了 CCLayer 我只是我把一些比较通用的东西封装到 这个BaseLayer 中 方便在后面的程序中调用 在以后的程序中这个类可能会逐渐添加一些通用的属性或者方法。
到这里 我们的一个简单的 LoadingLayer 就OK 了 下一节 我将讲解当loading 完毕之后 跳进 游戏的开始 界面 和开始游戏界面的大家,希望大家耐心看。
附上源码连接地址 里面带图片资源 和class 两个 文件夹 覆盖新创建的项目的目录 即可出现 当前效果
相关推荐
《Cocos2d-x 3.x游戏开发实战》是一本深度探讨Cocos2d-x 3.x框架的游戏开发书籍,适合对游戏编程有兴趣的开发者学习。Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的...
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
《Cocos2d-x实战:C++卷(2版)源代码》这本书是关于使用Cocos2d-x游戏引擎进行游戏开发的专业指南。Cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言...
1. Cocos2d-x:是一个开源的游戏开发框架,它主要用于开发跨平台的游戏和应用程序,支持iOS、Android、Windows、Mac等多个平台。它允许开发者使用一套代码,就可以在不同的操作系统上部署应用程序。 2. 实战++JS卷...
《Cocos2d-x实战C++卷》是关东升所著的一本深入探讨Cocos2d-x游戏引擎开发的专业书籍。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程...
《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...
资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...
《Cocos2d-x游戏引擎实战开发炸弹超人》是一个基于Cocos2d-x框架的2D游戏开发教程,旨在帮助开发者深入理解并熟练运用这一强大的游戏引擎。Cocos2d-x是一个开源、跨平台的2D游戏开发工具,它支持iOS、Android、...
Cocos2d-x是一款强大的开源游戏开发框架,广泛应用于2D游戏、教育软件、商业应用等领域。本套教学PPT旨在深入浅出地讲解Cocos2d-x游戏开发的核心技术,帮助开发者快速掌握这一工具。 首先,"初识Cocos2d-x"章节将...
《Cocos2d-x实战 JS卷》是一本深入探讨Cocos2d-x游戏开发的专著,主要聚焦于使用JavaScript语言进行游戏编程。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动设备和桌面平台,支持iOS、Android、Windows等多...
cocos2d-x实战 c++卷教程及完整源码下载,使用最新cocos2d-x-3.14版本,在xcode7.3上已编译通过。 解决相关问题 1、解决源程序在高版本上无法编译问题 2、解决源程序中文注释部分,xcode上显示乱码问题 3、根据书籍...
《迷失航线》是一款基于Cocos2d-x框架开发的射击类游戏,专为移动设备设计。Cocos2d-x是一个开源的游戏开发框架,它使用C++作为主要...通过这个项目,开发者可以深入学习和实践Cocos2d-x游戏开发,提高自己的专业技能。
《Cocos2d-x实战 Lua卷》是一本深入讲解Cocos2d-x游戏开发的书籍,专注于使用Lua脚本语言进行编程。Cocos2d-x是一个开源的游戏开发框架,广泛应用于2D游戏、教育应用和各种互动媒体项目。这本书的源码提供了丰富的...
精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发
李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发。本书根据大富翁项目一一展开讲解游戏开发过程中涉及的各方面内容...
本光盘是《Cocos2d-x游戏开发实战精解》一书的配书光盘,内容介绍如下。 (1)本书教学视频:该文件夹收录了本书的配套多媒体教学视频,可用暴风影音等视频播放器播放。 (2)本书源文件:该文件夹收录了本书涉及...
资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...
《cocos2d-x 3.x游戏开发实战光盘》是一个深入探讨cocos2d-x 3.x游戏引擎开发的资源集合,旨在帮助开发者通过实际案例掌握这一强大的2D游戏开发工具。cocos2d-x是一款开源的游戏开发框架,基于C++,广泛应用于跨平台...
cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...
Cocos2d-JS是一款强大的2D游戏开发框架,它结合了JavaScript的灵活性与Cocos2d-x的高效性能,让开发者能够轻松地创建跨平台的游戏。本篇将深入探讨Cocos2d-JS的游戏开发知识,从基础到进阶,帮助你掌握这一利器。 ...