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 ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
随机推荐
- 以JSONobject形式提交http请求
总结一下设置图标的三种方式: (1)button属性:主要用于图标大小要求不高,间隔要求也不高的场合. (2)background属性:主要用于能够以较大空间显示图标的场合. (3)drawableL ...
- deallocvt - 释放未使用的虚拟终端
SYNOPSIS(总览) deallocvt [ N1 N2 ... ] DESCRIPTION(描述) 如果不指定参数, deallocvt 程序会释放所有未使用的虚拟终端的核心内存和数据结构. 如 ...
- loadrunner 响应时间和TPS
例子:一个高速路有10个入口,每个入口每秒钟只能进1辆车 1.请问1秒钟最多能进几辆车? TPS=10 2.每辆车需要多长时间进行响应? reponse time = 1 3.改成20辆车 ...
- 使用GetLogicalDriveStrings获取卷标
#include <windows.h> #include <stdio.h> #define BUFSIZE 512 int main() { TCHAR szTemp[BU ...
- 获取windows版本号
原文:https://blog.csdn.net/justFWD/article/details/44856277 内容整理如下,点击跳至指定内容: manifest文件加上compatibility ...
- 10C++类和对象
类和对象 8.1 面向对象程序设计方法概述 到目前为止,我们介绍的是C++在面向过程的程序设计中的应用.对于规模比较小的程序,编程者可以直接编写出一个面向过程的程序,详细地描述每一瞬时的数据结构及对其 ...
- windows 下安装 RabbitMQ
一.安装 RabbitMQ 前需要先安装 Erlang http://www.erlang.org/downloads 下下载对应版本的安装文件进行安装. 安装完成后配置环境变量: ERLANG_HO ...
- 执行jar包报错:udfFull.jar中没有主清单属性
在windows系统的cmd命令行窗口中执行: java -jar udfFull.jar {"movie":"1287","rate":& ...
- 采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)
QCustomPlot是一个开源的基于Qt的第三方绘图库,能够绘制漂亮的2D图形. QCustomPlot的官方网址:https://www.qcustomplot.com/ 从官网下载QCustom ...
- MySQL与MyBatis中的查询记录
1.时间段查询 MySQL:select * from table where ctime >= CURDATE() and ctime <DATE_SUB(CURDATE(),INTER ...