`

学习开发cocos2d-x 游戏 实战篇(1)之 loading 界面编写

 
阅读更多

在游戏开发中有些资源需要预先加载在内存中这样方便我们在以后的使用。从而加快游戏的速度。特别 是预先从网络上下载资源的更需要一个友好的界面来告诉用户程序正在加载中。这个时候就需要我们做一个loading 界面

废话不多说下面开始讲解思路

1 当加载图片的时候使用 CCTextureCache::sharedTextureCache()->addImageAsync("gmbg/longding.png",this,callfuncO_selector(LoadingLayer::loadCallBack));

这个方法 其中 loadCallBack 是回调函数 当然在使用网络加载图片资源的时候 回调方法也设置成这个 就OK

2 加载特效使用的 是cocos2d-x 中进度条

部分代码如下

 

[cpp]
  1. // 添加进度条
  2. CCSprite* loadimg=CCSprite::create("gmbg/longding.png");
  3. CC_BREAK_IF(!loadimg);
  4. CCProgressTimer* pt = CCProgressTimer::create(loadimg);
  5. pt->setType(kCCProgressTimerTypeBar);// 设置成横向的
  6. //可以看作是按矩形显示效果的进度条类型
  7. pt->setMidpoint(ccp(0,0));
  8. // 用来设定进度条横向前进的方向从左向右或是从右向左
  9. pt->setBarChangeRate(ccp(1,0));
  10. //重新设置锚点
  11. float tex=getWinSize().width/2+getWinOrigin().x;
  12. float tey=getWinSize().height/5+getWinOrigin().y-5;
  13. pt->setPosition(ccp(tex,tey));
  14. pt->setPercentage(0);
  15. 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 类的生命

 

 

[cpp]
  1. #ifndef __LOADING_LAYER_H__
  2. #define __LOADING_LAYER_H__
  3. #include "BaseLayer.h"
  4. class LoadingLayer:public BaseLayer{
  5. public:
  6. virtualbool init();
  7. CREATE_FUNC(LoadingLayer);
  8. static cocos2d::CCScene* scene();
  9. void loadCallBack(cocos2d::CCObject* ped);// 异步加载图片时 的回调函数
  10. LoadingLayer();
  11. private:
  12. int loadingNum;//用来记录当前的加载图片的数量
  13. int totalNum;// 一共要加载的图片数量
  14. bool setUpdateView();// 用来初始化页面的 基本的纹理
  15. };
  16. #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 方法

 

 

[cpp]
  1. bool LoadingLayer::init(){
  2. bool isRet=false;
  3. do
  4. {
  5. CC_BREAK_IF(!BaseLayer::init());
  6. CC_BREAK_IF(!this->setUpdateView());
  7. CCTextureCache::sharedTextureCache()->addImageAsync("gmbg/longding.png",this,callfuncO_selector(LoadingLayer::loadCallBack));
  8. isRet=true;
  9. } while (0);
  10. return isRet;
  11. }
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 的方法 本人写代码习惯把代码封装成一小块 一小块 这纯属个人爱好 下面贴出里面的代码

 

 

[html]
  1. bool isRet=false;
  2. do
  3. {
  4. // 设置进度条的背景图片 我们把他放到屏幕下方的1/5处
  5. CCSprite* loadbackimg=CCSprite::create("gmbg/lodingbg.png");
  6. CC_BREAK_IF(!loadbackimg);
  7. loadbackimg->setPosition(ccp(getWinSize().width/2+getWinOrigin().x,getWinSize().height/5+getWinOrigin().y));
  8. this->addChild(loadbackimg,1);
  9. // 添加进度条
  10. CCSprite* loadimg=CCSprite::create("gmbg/longding.png");
  11. CC_BREAK_IF(!loadimg);
  12. CCProgressTimer* pt = CCProgressTimer::create(loadimg);
  13. pt->setType(kCCProgressTimerTypeBar);// 设置成横向的
  14. //可以看作是按矩形显示效果的进度条类型
  15. pt->setMidpoint(ccp(0,0));
  16. // 用来设定进度条横向前进的方向从左向右或是从右向左
  17. pt->setBarChangeRate(ccp(1,0));
  18. //重新设置坐标
  19. float tex=getWinSize().width/2+getWinOrigin().x;
  20. float tey=getWinSize().height/5+getWinOrigin().y-5;
  21. pt->setPosition(ccp(tex,tey));
  22. pt->setPercentage(0);
  23. this->addChild(pt,2,1);
  24. isRet=true;
  25. } while (0);
  26. 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;

回调函数的主要代码

 

 

[cpp]
  1. void LoadingLayer::loadCallBack(CCObject* ped){
  2. loadingNum++;
  3. CCProgressTimer* pt=(CCProgressTimer*)this->getChildByTag(1);
  4. float now=pt->getPercentage();
  5. pt->setPercentage(100/totalNum+now);
  6. if(loadingNum<totalNum){
  7. }else{
  8. // 加载完的时候跳转到响应的界面
  9. CCLOG("loading over");
  10. }
  11. }
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实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    大富翁手机游戏开发实战基于Cocos2d-x3.2引擎

    资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...

    精通COCOS2D-X游戏开发 基础卷_2016.4-P399-13961841.pdf

    精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发

    Cocos2d-x 3.x游戏开发实战pdf含目录

    Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。

    Cocos2d-x游戏编程——C++篇 .iso

    Cocos2d-x游戏编程——C++篇(电子工业出版社,徐飞 著)书本配套的光盘代码,

    Cocos2D-X游戏开发技术精解

    资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...

    cocos2d-x游戏开发实战精解

    本光盘是《Cocos2d-x游戏开发实战精解》一书的配书光盘,内容介绍如下。 (1)本书教学视频:该文件夹收录了本书的配套多媒体教学视频,可用暴风影音等视频播放器播放。 (2)本书源文件:该文件夹收录了本书涉及...

    cocos2d-x实战项目

    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-x-3.x游戏开发之旅

    Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签

    Cocos2D-X游戏开发技术精解.pdf

    《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...

    大富翁手机游戏开发实战 基于Cocos2d-x3.2引擎

    李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发。本书根据大富翁项目一一展开讲解游戏开发过程中涉及的各方面内容...

    精通Cocos2d-x游戏开发(进阶卷)源代码

    精通Cocos2d-x游戏开发(进阶卷)源代码 精通Cocos2d-x游戏开发(进阶卷)源代码 精通Cocos2d-x游戏开发(进阶卷)源代码

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    Cocos2d-x实战 JS卷 Cocos2d-JS开发 PDF 电子书完整版本

    迷失航线-Cocos2d-x项目实战-射击类游戏-关东升

    Cocos2d-x项目实战-射击类游戏-迷失航线,版本是Cocos2d-x-3.2

    Cocos2d-x高级开发教程

    书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关知识点。此外,书中的教学资源获得《捕鱼达人》手机游戏的授权,读者可以从一流游戏开发中高起点地...

    实例妙解Cocos2D-X游戏开发

    一线资深游戏开发工程师根据Cocos2D-X 最新版本撰写,Cocos2D...完全通过真实游戏案例驱动,不仅将Cocos2D-X的各种功能、原理、技巧融入其中,而且还详细讲解了空战类、塔防类、物理类游戏的开发过程和方法,实战性极强

    Cocos2d-x实战 JS卷

    Cocos2d-x实战

    Cocos2d-x游戏引擎实战开发炸弹超人

    Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎

    cocos2d-x 3.x游戏开发实战光盘

    cocos2d-x 3.x游戏开发实战光盘

    Cocos2d-x游戏开发实战精解-教学PPT

    01 初识Cocos2d-x.ppt 02 Cocos2d-x基础知识学习.ppt 03 在屏幕上显示内容.ppt ...

Global site tag (gtag.js) - Google Analytics