Cocos2d-X中的ProgressTimer
来源:互联网 发布:卡戴珊跟希尔顿比知乎 编辑:程序博客网 时间:2024/05/24 03:02
ProgressTimer即进度条,进度条在游戏开发中运用非常广泛,例如在一些格斗游戏中,显示血液的变化,还有游戏加载进度,等都离不开进度条
Cocos2d-X中使用CCProgressTimer创建进度条
先从一个简单的例子使用ProgressTimer屏蔽部分精灵
首先在工程目录下的Resource文件夹中放一张图片
然后创建一个ProgressTimer类
在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);};
在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;}
执行结果:
第二种:显示前半部分
#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();}}
执行结果:
第五种: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* bg = CCSprite::create("sliderTrack.png");CCSprite* sprite = CCSprite::create("sliderProgress.png"); //设置精灵的位置 bg->setPosition(center); //添加精灵 addChild(bg); //用精灵创建进度条CCProgressTimer* progress = CCProgressTimer::create(sprite); //设置进度条的位置 progress->setPosition(center); //添加进度条addChild(progress); //设置进度条的模式为条形模式progress->setType(kCCProgressTimerTypeBar); //向右变化 progress->setBarChangeRate(ccp(1, 0)); //从左边开始变化progress->setMidpoint(ccp(0, 0));// 设置progress的tagprogress->setTag(100);// 增加一个定时器schedule(schedule_selector(ProgressTimer::scheduleFunc), 0.1f); return true;}void ProgressTimer::scheduleFunc(float dt){ //通过进度条的ID得到进度条 CCProgressTimer* progress = (CCProgressTimer*)getChildByTag(100); //设置progress的进度,每调用一次进度加一 progress->setPercentage(progress->getPercentage() + 1); //当进度大于或者等于100时 if (progress->getPercentage() >= 100){ //终止定时器unscheduleAllSelectors();}}
执行结果:
第六种:ProgressTimer实现进度条4
程序代码
#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* bg = CCSprite::create("sliderTrack.png");CCSprite* sprite = CCSprite::create("sliderProgress.png"); //设置精灵的位置 bg->setPosition(center); //添加精灵 addChild(bg); //用精灵创建进度条CCProgressTimer* progress = CCProgressTimer::create(sprite); //设置进度条的位置 progress->setPosition(center); //添加进度条addChild(progress); //设置进度条的模式为条形模式progress->setType(kCCProgressTimerTypeBar); //向右变化 progress->setBarChangeRate(ccp(1, 0));// 设置progress的tagprogress->setTag(100);// 增加一个定时器schedule(schedule_selector(ProgressTimer::scheduleFunc), 0.1f); return true;}void ProgressTimer::scheduleFunc(float dt){ //通过进度条的ID得到进度条 CCProgressTimer* progress = (CCProgressTimer*)getChildByTag(100); //设置progress的进度,每调用一次进度加一 progress->setPercentage(progress->getPercentage() + 1); //当进度大于或者等于100时 if (progress->getPercentage() >= 100){ //终止定时器unscheduleAllSelectors();}}
执行结果:
ProgressTimer实现进度条5
程序代码
#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* bg = CCSprite::create("sliderTrack.png");CCSprite* sprite = CCSprite::create("sliderProgress.png"); //设置精灵的位置 bg->setPosition(center); //添加精灵 addChild(bg); //精灵旋转90度 bg->setRotation(90); //用精灵创建进度条CCProgressTimer* progress = CCProgressTimer::create(sprite); //设置进度条的位置 progress->setPosition(center); //添加进度条addChild(progress); //进度条旋转90度 progress->setRotation(90); //设置进度条的模式为条形模式progress->setType(kCCProgressTimerTypeBar); //向右变化 progress->setBarChangeRate(ccp(1, 0)); //从左边开始变化progress->setMidpoint(ccp(1, 0));// 设置progress的IDprogress->setTag(100);// 增加一个定时器schedule(schedule_selector(ProgressTimer::scheduleFunc), 0.1f); return true;}void ProgressTimer::scheduleFunc(float dt){ //通过进度条的ID得到进度条 CCProgressTimer* progress = (CCProgressTimer*)getChildByTag(100); //设置progress的进度,每调用一次进度加一 progress->setPercentage(progress->getPercentage() + 1); //当进度大于或者等于100时 if (progress->getPercentage() >= 100){ //终止定时器unscheduleAllSelectors();}}
执行结果:
ProgressTo实现进度条1
程序代码
#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* bg = CCSprite::create("sliderTrack.png");CCSprite* sprite = CCSprite::create("sliderProgress.png"); bg->setPosition(center); addChild(bg); //精灵旋转90度 bg->setRotation(90); //用精灵创建进度条CCProgressTimer* progress = CCProgressTimer::create(sprite); //设置进度条的位置 progress->setPosition(center); //添加进度条addChild(progress); //进度条旋转90度 progress->setRotation(90); //设置进度条的模式为条形模式progress->setType(kCCProgressTimerTypeBar); //向右变化 progress->setBarChangeRate(ccp(1, 0)); //从左边开始变化progress->setMidpoint(ccp(1, 0));// 设置progress的IDprogress->setTag(100); //用于动画显示Progress进度 //第一个参数:时间 //第二个参数:进度 CCProgressTo* progressTo = CCProgressTo::create(2,100); //执行进度 progress->runAction(progressTo); return true;}
执行结果:
0 0
- Cocos2d-X中的ProgressTimer
- Cocos2d-X中的ProgressTimer
- Cocos2d-X中的ProgressTimer
- Cocos2d-x----------------------------------ProgressTimer进度条
- cocos2d-x 3.x 进度条 ProgressTimer
- Cocos2d-x 3.2 之 进度条 progressTimer
- Cocos2d-x中,ProgressTimer类的用法
- cocos2d-x 3.X用progressTimer制作血槽
- cocos2d-x 3.0开发笔记---用progressTimer制作血槽
- cocos2d-x 3.0开发笔记---用progressTimer制作血槽
- cocos2d-x 3.0开发笔记---用progressTimer制作血槽
- cocos2d-x 3.0开发笔记---用progressTimer制作血槽
- Cocos2d-X中使用ProgressTimer实现一些简单的效果
- Cocos2d-X中使用ProgressTimer实现一些简单的效果
- Cocos2d-X中使用ProgressTimer实现一些简单的效果
- Cocos2d 进度条ProgressTimer
- cocos2d-x 血量条实现:LoadingBar、ProgressTimer和Slider实现示例
- ProgressTimer
- ThinkPHP中自定义目录结构
- Linux操作系统安全配置步骤
- iconv Linux下编码转换
- Excel中在第三张表中求其他两张表的和?
- Filter
- Cocos2d-X中的ProgressTimer
- Oracle SQL语句总结备查
- 概率图模型推断之Belief Propagation
- 关于Cookie安全性设置的那些事
- 关于Cookie中的Path和domain
- matlab中repmat函数的用法
- matlab中size/length/numel的用法
- 3个div并列居中
- Android LinearLayout实现多行多列