cocos2dx3.2利用ProgressTimer组合成评分控件
一、制作背景
二、材料准备
三、终于效果
四、代码实现
///////////////////////////////////////////////////////////////////////////////// /***************************ScoreBar Class**************************************/ ///////////////////////////////////////////////////////////////////////////////// class ScoreBar:public cocos2d::Node
{
public:
CREATE_FUNC(ScoreBar);
static ScoreBar* create(float mPercentage);
CC_CONSTRUCTOR_ACCESS:
ScoreBar();
~ScoreBar();
virtual bool init();
virtual bool initSelf();
virtual bool initBackGround();
virtual bool initProgress();
public:
void setPercent(unsigned char mPercentage);
float getPercent() const;
private:
cocos2d::Vector<cocos2d::ProgressTimer*>* _progressBars;
cocos2d::Node* _backGround;
};
///////////////////////////////////////////////////////////////////////////////// /***************************ScoreBar Class**************************************/ ///////////////////////////////////////////////////////////////////////////////// ScoreBar::ScoreBar():_progressBars(nullptr),
_backGround(nullptr)
{ } ScoreBar::~ScoreBar()
{
_progressBars->clear();
CC_SAFE_DELETE(_progressBars);
CC_SAFE_RELEASE(_backGround);
} ScoreBar* ScoreBar::create( float mPercentage )
{
auto bar = new ScoreBar();
if (bar&&bar->init())
{
bar->setPercent(mPercentage);
bar->autorelease();
return bar;
}
CC_SAFE_DELETE(bar);
bar = nullptr;
return nullptr;
} bool ScoreBar::init()
{
bool ret = false;
if (Node::init())
{
IF_RETURN_FALSE(!initSelf());
return true;
}
return ret;
} bool ScoreBar::initSelf()
{
IF_RETURN_FALSE(!initBackGround());
IF_RETURN_FALSE(!initProgress());
return true;
} bool ScoreBar::initBackGround()
{
unsigned char elementCount = 5;
const std::string elementBg = "grid/star_default.png";
_backGround = Node::create();
IF_RETURN_FALSE(!_backGround);
addChild(_backGround);
for (unsigned char i=0;i<elementCount;i++)
{
auto elementSprite = Sprite::create(elementBg);
IF_RETURN_FALSE(!elementSprite);
_backGround->addChild(elementSprite);
elementSprite->setPosition(elementSprite->getContentSize().width*i,0.0f);
}
return true;
} bool ScoreBar::initProgress()
{
unsigned char elementCount = 5;
const std::string elementPre = "grid/star_show.png";
float w = 0.0f;
float h = 0.0f;
if (nullptr==_progressBars)
{
_progressBars = new cocos2d::Vector<cocos2d::ProgressTimer*>();
}
for (unsigned char i=0;i<elementCount;i++)
{
auto elemntSprite = Sprite::create(elementPre);
IF_RETURN_FALSE(!elemntSprite); w = elemntSprite->getContentSize().width;
h = elemntSprite->getContentSize().height;
auto mProgressBar = ProgressTimer::create(elemntSprite);
IF_RETURN_FALSE(!mProgressBar);
addChild(mProgressBar);
_progressBars->pushBack(mProgressBar);
mProgressBar->setPosition(elemntSprite->getContentSize().width*i,0.0f);
mProgressBar->setType(ProgressTimer::Type::BAR);
mProgressBar->setMidpoint(Vec2(0,0));
mProgressBar->setBarChangeRate(Vec2(1, 0));
} this->setContentSize(Size(w*elementCount,h));
//CC_SAFE_RELEASE(baseSprite);
return true;
} void ScoreBar::setPercent( unsigned char mPercentage )
{
unsigned char elementCount = 5; //the total num of progress' star
unsigned char perFull = 100/elementCount; //per star full percent
unsigned int per = mPercentage/perFull; // full star num
unsigned char remain = (mPercentage%perFull)*elementCount; //the remain percent
for(unsigned char i=0;i<_progressBars->size();i++)
{
if(i<per)
_progressBars->at(i)->setPercentage(100);
else
_progressBars->at(i)->setPercentage(0);
}
if (per<_progressBars->size())
{
_progressBars->at(per)->setPercentage(remain);
}
} float ScoreBar::getPercent() const
{
float percent = 0;
unsigned char elementCount = 5;
for(auto e:*_progressBars)
{
percent+=e->getPercentage();
}
return percent/elementCount;
}
cocos2dx3.2利用ProgressTimer组合成评分控件的更多相关文章
- 033. asp.netWeb用户控件之二将页面转换成web控件和使用Web控件显示热点新闻
访问Web用户控件的属性 ASP.NET提供的各种服务器控件都有其自身的属性和方法,程序开发人员可以灵活地使用服务器控件中的属性和方法开发程序.在用户控件中,程序开发人员也可以自行定义各种属性和方法, ...
- iOS- 非整星的评分控件(支持小数)
概述 订单评论里实现星级评分控件: 简单整星评价与非整星的精评价. 详细 代码下载:http://www.demodashi.com/demo/10711.html 现在很多应用都有评分功能. 有了订 ...
- Android星星评分控件RatingBar的使用
在Android的开发中,有一个叫做评分控件RatingBar,我们可以使用该控件做等级划分.评分等作用,星星形状显示,也可以半星级别,我们来看一下评分控件如何使用. 布局文件中定义控件以及属性,这里 ...
- Android中如何利用attrs和styles定义控件
一直有个问题就是,Android中是如何通过布局文件,就能实现控件效果的不同呢?比如在布局文件中,我设置了一个TextView,给它设置了 textColor,它就能够改变这个TextView的文本的 ...
- Android自定义评分控件:RatingStarView
RatingStarView Android自定义的评分控件,类似ProgressBar那样的,使用星星图标(full.half.empty)作为progress标识的评分/打分控件. 效果图 图1: ...
- JQuery版评分控件
Hi All, 分享一个学习JQuery做的一个评分控件. 需求:当鼠标移动到 ‘☆’ 上时,该字符左边的 ‘☆’ 变成 '★',该字符右边仍然是 ‘☆’, 并显示相应星星数的评价结果:当鼠标推出 ‘ ...
- Web用户控件开发--星型评分控件
本文中分享一个实现简单,使用方便的星型评分控件. 一:贴几张测试图片先: 二.星型评分控件的实现: RatingBar.ascx: <%@ Control Language="C#&q ...
- UWP开发---DIY星级评分控件
一,需求来源 在开发韩剧TV UWP过程中,遇到了星级评分的控件问题,在安卓和html中很容易用现有的轮子实现星级评分,搜索了一下目前UWP还未有相关文章,在WPF的一篇文章中使用Photo shop ...
- 自定义RatingBar评分控件
1.介绍 实现类似美团外卖评分供能,系统提供了RatingBar,今天来自定义一波,当做自定义view的一个学习,效果如下,能够滑动或者点击变化星星数量 2.自定义属性 在values目录下的attr ...
随机推荐
- Python使用chardet包自动检测编码
chardet:charset detection 一旦自动检测出编码,就可以解码了. 八种文件打开方式 w:一旦打开文件,文件内容就清空了 r:只读方式打开 a:追加方式打开 r+:先读后写 以上四 ...
- ubuntu 中数据的迁移
1.先停止mysql /etc/init.d/mysql stop
- win7 下jenkins配置与使用
一.Jenkins的配置 1. 下载地址: Jenkins的官方网站:http://jenkins-ci.org/ 目前最新版本的Windows版:http://mirror.xmission.com ...
- GL_总账完整会计周期业务(流程)
2014-06-02 BaoXinjian
- Nginx 的线程池与性能剖析【转载】
正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求.为此,NGIN ...
- MySQL中 如何查询表名中包含某字段的表 ,查询MySql数据库架构信息:数据库,表,表字段
--查询tablename 数据库中 以"_copy" 结尾的表 select table_name from information_schema.tables where ta ...
- 使用 powerdesigner 将数据库表结构逆向工程生成对应的word文档
本机系统win10 + mysql 5.7.17 + powerDesigner 16.5 + mysql-connector-odbc-5.3.9-winx32.msi 1 使用 PowerDesi ...
- 使用matlab处理图像的基础知识
MATLAB基本函数一 矩阵运算 1.基本算数运算(加减乘除) + -运算要求矩阵维数相同,例m*n * /运算,例A=B*C,B矩阵是m*n矩阵,B是n*p矩阵,则A是m*p矩阵 A/B相当于A*i ...
- 怎么从docker中copy文件到 本机
怎么从docker中copy文件到 本机 docker cp <containerId>:/file/path/within/container /host/path/target
- excel错误:外部表不是预期的格式 错误
环境:win7+iis7+Office2007 在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一 ...