展会信息港展会大全

Cocos2d-X中的ProgressTimer
来源:互联网   发布日期:2015-09-27 15:31:01   浏览:1819次  

导读: ProgressTimer即进度条,进度条在游戏开发中运用非常广泛,例如在一些格斗游戏中,显示血液的变化,还有游戏加载进度,等都离不开进度条 Cocos2d-X中使用CCProgress...

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();

}

}

执行结果:

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港