ProgressTimer即进度条,进度条在游戏开发中运用很广泛,比如在一些格斗游戏中,显示血液的变化,还有游戏载入进度,等都离不开进度条

Cocos2d-X中使用CCProgressTimer创建进度条

先从一个简单的样例使用ProgressTimer屏蔽部分精灵

首先在project文件夹下的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();
}
}

运行结果:

ProgressTimer实现进度条3

首先在project文件夹下的Resource文件夹中加入两张进度条图片

程序代码:

#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的tag
progress->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的tag
progress->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的ID
progress->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的ID
progress->setTag(100); //用于动画显示Progress进度
//第一个參数:时间
//第二个參数:进度
CCProgressTo* progressTo = CCProgressTo::create(2,100); //运行进度
progress->runAction(progressTo); return true;
}

运行结果:





Cocos2d-X中的ProgressTimer的更多相关文章

  1. 如何在cocos2d项目中enable ARC

    如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...

  2. 如何在Cocos2D游戏中实现A*寻路算法(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  3. 如何在Cocos2D游戏中实现A*寻路算法(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  4. 如何在Cocos2D游戏中实现A*寻路算法(八)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  5. 如何在Cocos2D游戏中实现A*寻路算法(七)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  6. 如何在Cocos2D游戏中实现A*寻路算法(五)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  7. 如何在Cocos2D游戏中实现A*寻路算法(四)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  8. 如何在Cocos2D游戏中实现A*寻路算法(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  9. 如何在Cocos2D游戏中实现A*寻路算法(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

随机推荐

  1. blockdev - 从命令行调用区块设备控制程序

    总览(SYNOPSIS) blockdev [options] commands devices 描述(DESCRIPTION) blockdev 工具允许从命令行调用区块设备控制程序. 选项(OPT ...

  2. ie11 突然不能加载外部css 很神奇 头部改为 <!DOCTYPE> <html>

    <!DOCTYPE html> <html> 改为 <!DOCTYPE> <html>   OK了

  3. 2019年,Linux运维行业的趋势,跟不上学习就被淘汰

    运维行业经历了多年的发展,已经有了很大的变化,最开始的机房.网线.人肉,到现在一步步的自动化.智能化.容器化,运维人员的职业技能要求越来越高,稍不注意就可能被淘汰. 今天马小哥就来盘点一下2019年运 ...

  4. UML-画类图与交互图的顺序

    并行.画完交互图,在画类图.交替进行.

  5. Kotlin – CharSequence IsNullOrBlank() vs IsNullOrEmpty()

    本文摘自:http://blog.farifam.com/2018/01/28/kotlin-charsequence-isnullorblank-vs-isnullorempty/ Koltin p ...

  6. swiper 3D 覆盖流的使用方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  7. CentOS7安装Tomcat9并设置开机启动

    1.下载 Tomcat 9 CentOS 7 下创建目录并下载文件: cd /usr/local/ mkdir tomcat cd tomcat wget http://mirrors.hust.ed ...

  8. linux ping-测试主机之间网络的连通性

    博主推荐:更多网络测试相关命令关注 网络测试  收藏linux命令大全 ping命令用来测试主机之间网络的连通性.执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问 ...

  9. eclipse perl配置

    先下载jdk,如果jdk装的是32位,eclipse也要下载32位的,64位也是一样.我用的是jdk7 64位. 下载eclipse,去官网上下载最新的http://www.eclipse.org/d ...

  10. 闲着无聊 一个python的,三级菜单。装逼版。

    menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': ...