ProgressTimer即进度条,进度条在游戏开发中运用非常广泛,例如在一些格斗游戏中,显示血液的变化,还有游戏加载进度,等都离不开进度条
Cocos2d-X中使用CCProgressTimer创建进度条
先从一个简单的例子使用ProgressTimer屏蔽部分精灵
首先在工程目录下的Resource文件夹中放一张图片
然后创建一个ProgressTimer类
在ProgressTimer.h中添加下面的代码
#ifndef __ProgressTimer_H__
#define __ProgressTimer_H__
#include "cocos2d.h"
USING_NS_CC;
class ProgressTimer : public CCLayer
{
public:
virtual bool init();
static CCScene* scene();
CREATE_FUNC(ProgressTimer);
void scheduleFunc(float dt);
};
#endif // __ProgressTimer_H__
在ProgressTimer.cpp中添加下面的代码
#include "ProgressTimer.h"
CCScene* ProgressTimer::scene()
{
CCScene *scene = CCScene::create();
ProgressTimer *layer = ProgressTimer::create();
scene->addChild(layer);
return scene;
}
bool ProgressTimer::init()
{
//初始化父类
CCLayer::init();
//得到窗口的大小
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//设置坐标
CCPoint center = ccp(winSize.width / 2, winSize.height / 2);
//创建精灵
CCSprite* sprite = CCSprite::create("labelatlasimg.png");
//用精灵创建进度条
CCProgressTimer* progress = CCProgressTimer::create(sprite);
addChild(progress);
//设置进度条的位置
progress->setPosition(center);
//设置百分比(显示进度条的50%)
progress->setPercentage(50);
return true;
}
执行结果:
实例2:显示前半部分
#include "ProgressTimer.h"
CCScene* ProgressTimer::scene()
{
CCScene *scene = CCScene::create();
ProgressTimer *layer = ProgressTimer::create();
scene->addChild(layer);
return scene;
}
bool ProgressTimer::init()
{
//初始化父类
CCLayer::init();
//得到窗口的大小
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//设置坐标
CCPoint center = ccp(winSize.width / 2, winSize.height / 2);
//创建精灵
CCSprite* sprite = CCSprite::create("labelatlasimg.png");
//用精灵创建进度条
CCProgressTimer* progress = CCProgressTimer::create(sprite);
addChild(progress);
//设置进度条的位置
progress->setPosition(center);
//设置进度条的模式
//kCCProgressTimerTypeBar表示条形模式
//默认的模式是kCCProgressTimerTypeRadial(圆圈模式)
progress->setType(kCCProgressTimerTypeBar);
//设置进度条变化的方向
//setMidpoint默认在左边
//ccp(1,0)表示在X轴方向上有变化,在y轴方向上没变化
//ccp(0,1)表示在X轴方向上没有变化,在y轴方向上有变化
progress->setBarChangeRate(ccp(1,0));
//从哪个方向开始变化
//ccp(0,0)表示从左边开始变化
progress->setMidpoint(ccp(0,0));
//设置百分比(显示进度条的50%)
progress->setPercentage(50);
return true;
}
执行结果:
ProgressTimer实现旋转效果的进度条
程序代码:
#include "ProgressTimer.h"
CCScene* ProgressTimer::scene()
{
CCScene *scene = CCScene::create();
ProgressTimer *layer = ProgressTimer::create();
scene->addChild(layer);
return scene;
}
bool ProgressTimer::init()
{
//初始化父类
CCLayer::init();
//得到窗口的大小
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//设置坐标
CCPoint center = ccp(winSize.width / 2, winSize.height / 2);
//创建精灵
CCSprite* sprite = CCSprite::create("labelatlasimg.png");
//用精灵创建进度条
CCProgressTimer* progress = CCProgressTimer::create(sprite);
addChild(progress);
//设置进度条的位置
progress->setPosition(center);
//设置progress的ID为100
progress->setTag(100);
//定义一个定时器
schedule(schedule_selector(ProgressTimer::scheduleFunc), 0.5f);
return true;
}
void ProgressTimer::scheduleFunc(float dt)
{
//通过进度条的ID得到进度条
CCProgressTimer* progress = (CCProgressTimer*)getChildByTag(100);
progress->setPercentage(progress->getPercentage() + 1);
if (progress->getPercentage() >= 100)
{
unscheduleAllSelectors();
}
}
执行结果:
ProgressTimer实现进度条2
程序代码:
#include "ProgressTimer.h"
CCScene* ProgressTimer::scene()
{
CCScene *scene = CCScene::create();
ProgressTimer *layer = ProgressTimer::create();
scene->addChild(layer);
return scene;
}
bool ProgressTimer::init()
{
//初始化父类
CCLayer::init();
//得到窗口的大小
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//设置坐标
CCPoint center = ccp(winSize.width / 2, winSize.height / 2);
//创建精灵
CCSprite* sprite = CCSprite::create("labelatlasimg.png");
//用精灵创建进度条
CCProgressTimer* progress = CCProgressTimer::create(sprite);
addChild(progress);
//设置进度条的位置
progress->setPosition(center);
//设置进度条的模式
//kCCProgressTimerTypeBar表示条形模式
progress->setType(kCCProgressTimerTypeBar);
//设置进度条变化的方向
//setMidpoint默认在左边
//ccp(1,0)表示向右变化
progress->setBarChangeRate(ccp(1,0));
//从哪个方向开始变化
//ccp(0,0)表示从左边开始变化
progress->setMidpoint(ccp(0,0));
//设置progress的ID为100
progress->setTag(100);
//定义一个定时器
schedule(schedule_selector(ProgressTimer::scheduleFunc), 0.1f);
return true;
}
void ProgressTimer::scheduleFunc(float dt)
{
//通过进度条的ID得到进度条
CCProgressTimer* progress = (CCProgressTimer*)getChildByTag(100);
progress->setPercentage(progress->getPercentage() + 1);
if (progress->getPercentage() >= 100)
{
unscheduleAllSelectors();
}
}
执行结果: