cocos2dx基础篇(23)——进度条CCProgressTimer

【唠叨】

哎,周围的同学都在搞cocos2dx 3.X了,而我还在用2.2.3。没办法,网上3.X的教程毕竟很少,还是等我的同学学得差不多了,我再换成3.X跟着同学搞,哪里不会问哪里。

本节主要来讲讲进度条CCProgressTimer,相信大家也不会陌生的吧。如安装软件时显示的进度、游戏中人物的HP、MP显示的百分比横条。

【致谢】

http://gl.paea.cn/contents/2260d48c5e2bc83d.html

(没错,又是这位大牛。。。)



【CCProgressTimer】

1、进度动作CCProgressTo、CCProgressFromTo

在讲解进度条CCProgressTimer之前,先讲讲和进度条有半毛线关系的两个动作类:

(1)CCProgressTo        (2)CCProgressFromTo

为什么在之前的基本动作CCAction那章不介绍,而放在这里进行介绍呢?这是因为,这两个动作只是针对CCProgressTimer而言的,对其他的CCNode子类(如:CCSprite)没啥用处。

从这两个动作的字面上,也可以看出他们的用处了吧?就是进度条的进度从 a% 变化到 b% 。

使用方法如下:

//
	//几秒内从0%变化到指定进度
	CCProgressTo::create(‘时间‘, ‘变化到百分之几‘);

	//几秒内从a%进度变化到b%进度
	CCProgressFromTo::create(‘时间‘, ‘从百分之几‘, ‘变化到百分之几‘);
//

2、CCProgressTimer

CCProgressTimer就是拿一张CCSprite精灵图片来作为进度条,然后根据一个百分比属性,实现显示/隐藏图片的一部分区域,达到图形化显示进度的作用。

进度条有两种样式:扇形进度条、条形进度条。默认锚点(0.5,0.5)。

常用操作如下:

(1)创建方法

(2)设置精灵图片、设置进度值、设置样式

(3)设置开始的中心位置,设置用于做进度条的比例(这两个比较抽象,需要单独讲解)

其中,有两个函数比较抽象:setMidpointsetBarChangeRate。由于语言组织能力太弱,所以后面我会用图片来说明一下。

//
class CCProgressTimer : public CCNodeRGBA
{
/**
 *		创建方法 create
 */

	//精灵图片作为进度条
	CCProgressTimer::create(CCSprite* sp);

/**
 *		属性设置
 *		setSprite , setPercentage , setType
 */

	//设置进度条所使用的精灵图片
	void setSprite(CCSprite *pSprite);
	CCSprite* getSprite();

	//设置进度百分值[0,100]
	void setPercentage(float fPercentage);
	float getPercentage();

	//设置进度条样式
	//		kCCProgressTimerTypeRadial	 扇形进度计时器
	//		kCCProgressTimerTypeBar		 条形进度计时器
	void setType(CCProgressTimerType type);
	CCProgressTimerType getType();

	//反进度显示
	//条形:从100到0。
	//扇形:false顺时针,true逆时针
	void setReverseProgress(bool reverse);

/**
 *		进度条设置
 *		setMidpoint , setBarChangeRate
 */

	//设置进度条起始的中心位置,范围[0,1](默认图片中点ccp(0.5,0.5))
	void setMidpoint(CCPoint);
	CCPoint getMidpoint();

	//用于做进度条所占的图片比例
	void setBarChangeRate(CCPoint);
	CCPoint getBarChangeRate();

/**
 *		父类继承
 *		setAnchorPoint , setColor , setOpacity
 */

	//设置锚点
	void setAnchorPoint(CCPoint anchorPoint);

	//设置颜色
	virtual void setColor(const ccColor3B& color);
	virtual const ccColor3B& getColor() const;

	//设置透明度
	virtual void setOpacity(GLubyte opacity);
	virtual GLubyte getOpacity() const;
};
//

3、setMidpoint

setMidpoint是用来设置进度条的起始中心位置的。

(1)对于扇形进度条:相当于“圆心”,从0到100,慢慢展开扇形。

(2)对于条形进度条:相当于从某点向两边扩散。

还是看图吧,语言表达有限:

3、setBarChangeRate

setBarChangeRate是用于设置条形进度条所占的图片比例,对于扇形是无效的。

也就是说拿出图片多少的比例作为进度条。还是看图吧,语言表达有限。

下列三组图解中,黄颜色区域表示一开始就已经显示的图片区域。而ccp(x,y):表示宽度还有 x 比例的图片还未显示,高度还有 y 比例的图片还未显示,用作显示进度条。

有下图可知,“进度百分值”是相对剩余ccp(x,y)用作显示进度条的那一部分,已经显示的百分率,而不是整张图片的百分率。

常用方式如下:

//
	setBarChangeRate( ccp(1,0) )    :  //只有X轴变化。 (起始X轴不显示)
	setBarChangeRate( ccp(0,1) )    :  //只有Y轴变化。 (起始Y轴不显示)
	setBarChangeRate( ccp(1,1) )    :  //X,Y轴都变化。(起始X,y轴都不显示)
	setBarChangeRate( ccp(0.5,0.5) ):  //X,Y轴都变化。(起始X,y轴都已显示一半)
//

三组图片对比图:

4、常用的进度条方式

由上面的讲解可以得出,进度条的显示方式主要受三个设置的影响:

(1)setType         :扇形、条形进度条。

(2)setMidpoint     :中心位置。

(3)setBarChangeRate:用作条形进度条显示的图片所占比例。

其中(1)的设置决定了进度条的类型。而(2)(3)的配合使用可以有多种不同的显示方式。

常用的(2)(3)配合使用方式如下:

//
	//当条形进度条样式为:setBarChangeRate( ccp(1,0) )
		ccp(1,0):        "从右到左显示"
		ccp(0.5,0):      "从中间到两边显示"
		ccp(0,0):        "从左到右显示"
	//当条形进度条样式为:setBarChangeRate( ccp(0,1) )
		ccp(0,1):        "从上到下显示。"
		ccp(0,0.5):      "从中间到两边显示。
		ccp(0,0):        "从下到上显示。"
	//当条形进度条样式为:setBarChangeRate( ccp(1,1) )
		ccp(0,1):        "X从左到右显示,    Y从上到下显示"
		ccp(0,0.5):      "X从左到右显示,    Y从中间到两边显示"
		ccp(1,0):        "X从右到左显示,    Y从下到上显示"
		ccp(0.5,0):      "X从中间到两边显示,Y从下到上显示"
		ccp(0,0):        "X从左到右显示,    Y从下到上显示"
		ccp(0.5,0.5):    "X从中间到两边显示,Y从中间到两边显示"
		ccp(1,1):        "X从右到左显示,    Y从上到下显示"
//


【代码实战】

(1)资源图片:

(2)创建两类进度条:条形、扇形。

并定义进度条显示方式。

//
//条形进度条pro1
	CCSprite* bg1 = CCSprite::create("Icon.png");
	CCProgressTimer* pro1 = CCProgressTimer::create(bg1);
	pro1->setPosition( ccp(130, 100) );
	this->addChild(pro1);

	//条形,定义进度条方式:从右到左显示
	pro1->setType(kCCProgressTimerTypeBar);
	pro1->setBarChangeRate( ccp(1, 0) );
	pro1->setMidpoint( ccp(1, 0) );
	//pro1->setReverseProgress(true); //反进度显示

//扇形进度条pro2
	CCSprite* bg2 = CCSprite::create("Icon.png");
	CCProgressTimer* pro2 = CCProgressTimer::create(bg2);
	pro2->setPosition( ccp(350, 100) );
	this->addChild(pro2);

	//扇形,圆心ccp(0.3 , 0.7)
	pro2->setType(kCCProgressTimerTypeRadial);
	pro2->setMidpoint( ccp(0.3, 0.7) );
	//pro2->setReverseProgress(true); //逆时针
//

(3)创建进度动作CCProgressTo、CCProgressFromTo。

并让pro1、pro2分别执行两个进度动作。

//
//进度动作
	CCProgressTo* ac1 = CCProgressTo::create(2.0f, 100);
	CCProgressFromTo* ac2 = CCProgressFromTo::create(2.0f, 30, 100);

	pro1->runAction( CCRepeatForever::create(ac1) ); //2秒内,从0到100
	pro2->runAction( CCRepeatForever::create(ac2) ); //2秒内,从30到100
//

运行结果:

    若添加反进度显示setReverseProgress()

//
	pro1->setReverseProgress(true); //反进度显示
	pro2->setReverseProgress(true); //逆时针
//

结果如下:

总结:

更多进度条的显示方式,请自行参悟。



【Demo下载】

http://down.51cto.com/data/1868757

时间: 2024-10-19 13:21:07

cocos2dx基础篇(23)——进度条CCProgressTimer的相关文章

cocos2dx基础篇(12)——点九图CCScale9Sprite

[引言] 本来是想学学控件类CCControl的另一个子类按钮控件CCControlButton的.但是发现里面有一个参数牵扯到CCScale9Sprite这个类.看到CCScale9Sprite,很容易联想到精灵类CCSprite.两者又有什么区别呢?因此我就去网上收了一些有关CCScale9Sprite的资料来学习. [参考文献] [1] http://blog.csdn.net/nynyvkhhiiii/article/details/12782249 [2] http://www.cnb

cocos2dx基础篇(8)——定时器更新schedule、update

[本节内容] 定时器在大部分游戏中是不可或缺的,即每隔一段时间,就要执行相应的刷新体函数,以更新游戏的画面.时间.进度.敌人的指令等等. cocos2dx为我们提供了定时器schedule相关的操作.其操作函数的定义在CCNode中,所以基本上大多数的引擎类都可以设置定时器,如CCLayer.CCSprite.CCMenu等. 定时器更新的方式分为三类: (1)默认定时器:scheduleUpdate(); (2)自定义定时器:schedule(); (3)一次性定时器:scheduleOnce

cocos2dx基础篇(7)——菜单按钮CCMenu、CCMenuItem

[本节内容] 菜单按钮在游戏中是经常被用到的,比如主菜单界面的菜单选项,暂停游戏时的菜单选项等等.cocos2dx引擎同样为我们提供了CCMenu菜单的功能,并包含了一些简单的菜单项CCMenuItem.且菜单项附带触碰按钮时,自动放大的效果. 温馨提示:本节内容比较多,需要大家慢慢分析,不要急于求成. 本节组织结构如下: 一.介绍CCMenu. 二.介绍CCMenuItem,及其具体的六个子类. 三.代码实战. [一.菜单CCMenu] 菜单CCMenu是专门用来承载菜单按钮的CCLayer图

cocos2dx基础篇(13)——按钮控件CCControlButton

[引言] 按钮类CCControlButton继承于控件类CCControl. 控件类CCControl主要向子类提供了一系列的控件触发事件.当子控件触发相关的事件后,就会执行相关的控件事件回调函数.这与之前讲的CCMenu中的菜单按钮回调是类似的. 控件类CCControl主要有三个子类: (1)开关控件CCControlSwitch (2)滑块控件CCControlSlider (3)按钮控件CCControlButton 本节讲的是其子类其中之一:按钮类CCControlButton. [

cocos2dx基础篇(4)——浅析cocos2dx引擎目录

通过前面几节的学习,相信大家都已经配置好了VS+cocos2dx2.2.3的环境,并且成功运行了官方的案例HelloWorld. 一.窥探文件目录 要想学好cocos2dx,首先就需要对引擎目录下的各个文件有所了解.接下来,就让我们先来分析一下cocos2dx2.2.3引擎的文件目录吧. 从目录中我们主要了解一下一下几个文件: cocos2dx:cocos2d-x引擎的核心部分,存放了引擎的大部分源文件. CocosDenshion:声音模块相关源文件. Debug.win32:在Windows

cocos2dx基础篇(5)——浅析几个常见类

目录 入口类main.cpp 主要控制类AppDelegate.cpp 节点类CCNode 导演类CCDirector 场景类CCScene 层次类CCLayer 精灵类CCSprite 大小类CCSize 坐标CCPoint 矩形类CCRect 数组类CCArray 入口类main.cpp 这是应用程序的入口类,用于创建cocos2dx的AppDelegate实例.窗口大小.以及运行程序. 主要代码如下:     // create the application instance     A

cocos2dx基础篇(10)——开关按钮CCControlSwitch

[本节内容] 开关类CCControlSwitch继承于控件类CCControl. 控件类CCControl主要向子类提供了一系列的控件触发事件.当子控件触发相关的事件后,就会执行相关的控件事件回调函数.这与之前讲的CCMenu中的菜单按钮回调是类似的. 控件类CCControl主要有三个子类: (1)开关控件CCControlSwitch (2)滑块控件CCControlSlider (3)按钮控件CCControlButton 本节讲的是其子类其中之一:开关类CCControlSwitch.

Android自定义控件系列之应用篇——圆形进度条

一.概述 在上一篇博文中,我们给大家介绍了Android自定义控件系列的基础篇.链接:http://www.cnblogs.com/jerehedu/p/4360066.html 这一篇博文中,我们将在基础篇的基础上,再通过重写ondraw()方法和自定义属性实现圆形进度条,效果如图所示: 二.实现步骤   1.  编写自定义组件MyCircleProgress扩展View public class MyCircleProgress extends View { - } 2.  在MyCircl

Cocos2d-x 3.2 之 进度条 progressTimer

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 好长时间没有更博了.. 有点懒啊.. 亲身经历提示广大猿们:换季了,防感冒! 言归正传,最近在做 三消的手游, 关卡设计是没指望了,只能做个限时的,所以,就研究了研究schedule, 这个以后再更新, 度娘搜索的时候,看到了进度条的progressTimer,