Cocos2d-x 中 CCProgressTimer

CCProgressTimer,创建使用这个节点可以大致实现两个作用的效果:

其一:在游戏中几乎大部分的游戏启动界面都是游戏加载画面,那么用到的一般是进度条提示加载进度,其使用的就是CCProgressTimer。

其二:在游戏中需要对精灵的出现等动作制作一些渐显的效果。

(1)类型一般就是两种:

1 typedef enum {
2     /// Radial Counter-Clockwise
3     kCCProgressTimerTypeRadial,
4     /// Bar
5     kCCProgressTimerTypeBar,
6 } CCProgressTimerType;

①类型1:radial(环形)

1 CCSize wSize = CCDirector::sharedDirector()->getWinSize();
2     progressTimer = CCProgressTimer::create(CCSprite::create("progress.gif"));
3     progressTimer->setType(kCCProgressTimerTypeRadial);
4     // 默认的情况下,环形渐变的方向是:顺时针
5     // 改变其渐变的方向 Makes the ridial CCW (逆时针)
6     progressTimer->setReverseProgress(true);
7     progressTimer->setPosition(wSize.width/2,wSize.height/2);
8     this->addChild(progressTimer);

②类型2:bar  (条形:包括vertical 和 horizontal)

渐变的方向问题:

vertical竖直方法包括从上到下和从下到上;

horizontal水平方向包括从左到右和从右到左。

这里涉及到两个设置参数:

首先是setMidpoint设置起点

其次是setBarChangeRate设置变化rate

如果不用变化的方向,则设置该方向为0,否则设置为1。

 1 CCSize wSize = CCDirector::sharedDirector()->getWinSize();
 2     progressTimer = CCProgressTimer::create(CCSprite::create("progress.gif"));
 3     progressTimer->setType(kCCProgressTimerTypeBar);
 4     
 5     //从左到右
 6     progressTimer->setMidpoint(ccp(0, 0.5));
 7     progressTimer->setBarChangeRate(ccp(1, 0));
 8     
 9     //从右到左
10 //    progressTimer->setMidpoint(ccp(1, 0.5));
11 //    progressTimer->setBarChangeRate(ccp(1, 0));
12     
13     //从上到下
14 //    progressTimer->setMidpoint(ccp(0.5, 1));
15 //    progressTimer->setBarChangeRate(ccp(0, 1));
16     
17     //从下到上
18 //    progressTimer->setMidpoint(ccp(0.5, 0));
19 //    progressTimer->setBarChangeRate(ccp(0, 1));
20     
21     progressTimer->setPosition(wSize.width/2,wSize.height/2);
22     this->addChild(progressTimer);

(2) 执行变化

①、如果是要实现精灵渐变的显示效果:

创建CCProgressTo或者是CCProgressFromTo动作,让CCProgressTimer执行。
CCProgressTo和CCProgressFromTo的区别是:

前者:Progress to percentage(初始化有两个参数)(float duration, float fPercent)

后者:Progress from a percentage to another percentage(初始化有三个参数)(float duration, float fFromPercentage, float fToPercentage)

1 CCProgressTo *progressTo = CCProgressTo::create(2.0, 100);
2     //等价于:
3     //CCProgressFromTo *progressFromTo = CCProgressFromTo::create(2.0, 0, 100);
4     progressTimer->runAction(CCRepeatForever::create(progressTo));

②、如果是要实现加载进度条的效果:

需要重载update方法,在这个方法中实现进度条percentage的变化。

1 this->scheduleUpdate();
1 void HelloWorld::update(float dt)
2 {
3     float percentage = progressTimer->getPercentage();
4     
5     if (percentage < 100) {
6         percentage += 1;
7         progressTimer->setPercentage(percentage);
8     }
9 }
原文地址:https://www.cnblogs.com/atong/p/3309785.html