Cocos2d-X中的ProgressTimer
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的更多相关文章
- 如何在cocos2d项目中enable ARC
如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...
- 如何在Cocos2D游戏中实现A*寻路算法(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(八)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(七)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(五)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(四)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(三)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
随机推荐
- html 零散问题
1.iconfont的使用 https://www.cnblogs.com/yujihang/p/6706056.html 2.阴影效果比较 box-shadow:0 0 6px #000 inset ...
- 正则表达式,匹配查找函数(preg_match_all)flags参数对比
格式: int preg_match_all ( string pattern, string subject, array matches [, int flags] ) 参数 flags 选项有以 ...
- 解决【npm ERR! Unexpected end of JSON input while parsing near '...sh_time":141072930277'】方案
问题描述执行npm install的时候报错npm ERR! Unexpected end of JSON input while parsing near '...sh_time":141 ...
- listener.log文件过大导致oracle假死
/home/u01/oracle/product/11gr2/db_1/log/diag/tnslsnr/VM_179_95_centos/listener/trace/listener.log li ...
- 新引入thinkphp报错“应用目录[./Application/]不可写,目录无法自动生成! 请手动生成项目目录~”
新引入thinkphp报错“应用目录[./Application/]不可写,目录无法自动生成! 请手动生成项目目录~”, 其主要原因是文件夹的权限问题,手动将项目文件夹权限更改为可读可写就OK,具体操 ...
- BZOJ 1711 吃饭dining/Luogu P1402 酒店之王 拆点+最大流流匹配
题意: (吃饭dining)有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享 ...
- restframework框架之认证
1. 认证之APIView 在聊APIView之前, 我们先重温一下django2.x的CBV流程 a. 对于django而言, 当浏览器请求到达之后,按照规则首先会经过各大中间件(Middlewar ...
- Linux下安装SVN,仓库创建,用户权限管理
Exported from Notepad++ Linux下安装SVN,仓库创建,用户权限管理 1.SVN安装 Ubuntu系统下安装:sudoapt-getinstallsubv ...
- Python操作Redis、Memcache
今天主要介绍如何通过python来对Redis和memcache进行操作,下面开始今天的内容: 一.Memcached操作 Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web ...
- python网络编程01
1.什么是C/S架构? 客户端/服务器架构.实现服务端软件与客户端软件基于网络的通信. 2.互联网协议是什么?分别介绍五层协议中每一层的功能? 互联网协议是指用于互联网通信的规范.分为:osi七层.t ...