//
// Number.cpp
// PetSprite
//
// Created by Wangzhexian on 13-4-10.
//
//
#include "Number.h"
#include <sstream>
bool Number::init()
{
if (!CCLayer::init()) {
return false;
}
m_aligment = NUMBER_ALIGNMENT_LEFT;
m_strNumber[0] = '0';
m_strNumber[1] = '\0';
m_ready = false;
m_offsetX = 0;
m_numberLength = 0;
m_NumberStore = new CCArray();
for (int i = 0; i<MAX_NUMBER_LENGTH; i++) {
CCSprite* sprite = new CCSprite();
sprite->init();
sprite->autorelease();
sprite->setVisible(false);
this->addChild(sprite);
m_NumberStore->addObject(sprite);
}
return true;
}
void Number::setKeyName(const char* _keyName)
{
char buff[15];
sprintf(buff, "%s0.png",_keyName);
CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage(buff);
if (texture) {
m_ready = true;
m_keyName = _keyName;
}else{
CCLog("%s:图片关键字无效");
}
}
void Number::setNumber(const char* number)
{
if (!m_ready ) {
return;
}
int len = strlen(number);
if (len>MAX_NUMBER_LENGTH-1) {
len = MAX_NUMBER_LENGTH-1;
}
m_numberLength = len;
memcpy(m_strNumber, number, len);
m_strNumber[MAX_NUMBER_LENGTH-1] = '\0';
updateNumber();
}
void Number::setNumber(std::string &number)
{
setNumber(number.c_str());
}
void Number::setNumber(float number)
{
char buff[MAX_NUMBER_LENGTH];
std::stringstream os;
os<<number;
os>>buff;
setNumber(buff);
}
void Number::setNumber(int number)
{
char buff[MAX_NUMBER_LENGTH];
std::stringstream os;
os<<number;
os>>buff;
setNumber(buff);
}
void Number::setOffsetX(float _rate)
{
m_offsetX = _rate;
}
void Number::updateNumber()
{
if (!m_ready) {
return;
}
switch (m_aligment) {
case NUMBER_ALIGNMENT_CENTER:
{
centerUpdate();
}
break;
case NUMBER_ALIGNMENT_LEFT:
{
leftUpdate();
break;
}
case NUMBER_ALIGNMENT_RIGHT:
{
rightUpdate();
break;
}
default:
break;
}
}
void Number::leftUpdate()
{
CCSprite* sp = (CCSprite*)m_NumberStore->objectAtIndex(0);
CCSize size = sp->boundingBox().size;
float startPos = size.width*0.5;
float offset = size.width*(1-m_offsetX);
showNumber(startPos,offset);
}
void Number::rightUpdate()
{
CCSprite* sp = (CCSprite*)m_NumberStore->objectAtIndex(0);
CCSize size = sp->boundingBox().size;
float offset = size.width*(1-m_offsetX);
float startPos = -(size.width*0.5 + (m_numberLength - 1)*offset);
showNumber(startPos,offset);
}
void Number::centerUpdate()
{
CCSprite* sp = (CCSprite*)m_NumberStore->objectAtIndex(0);
CCSize size = sp->boundingBox().size;
float offset = size.width*(1-m_offsetX);
float startPos = -(size.width*0.5 + (m_numberLength - 1)*offset*0.5);
showNumber(startPos,offset);
}
void Number::showNumber(float startPos,float offset)
{
std::string nameBuff;
for (int i = 0; i<m_numberLength; i++) {
CCSprite* sp = (CCSprite*)m_NumberStore->objectAtIndex(i);
if (m_strNumber[i]=='.') {
nameBuff = m_keyName+"p.png";
}else{
nameBuff = m_keyName;
nameBuff+= m_strNumber[i];
nameBuff+=".png";
// sprintf(nameBuff, "%s%c.png",m_keyName.c_str(),m_strNumber[i]);
}
CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage(nameBuff.c_str());
sp->setTexture(texture);
CCRect rect = CCRectZero;
rect.size = texture->getContentSize();
sp->setTextureRect(rect);
sp->setPosition(ccp(startPos, 0));
startPos+=offset;
sp->setVisible(true);
nameBuff.clear();
}
for (int i = m_numberLength; i<MAX_NUMBER_LENGTH; i++) {
CCSprite* sp = (CCSprite*)m_NumberStore->objectAtIndex(i);
sp->setVisible(false);
}
}
void Number::setAlignment(NUMBER_ALIGNMENT _aligment)
{
if (_aligment != m_aligment && m_ready) {
m_aligment = _aligment;
updateNumber();
}
}
void Number::onExit()
{
m_NumberStore->release();
}
cocos2d-x Number(图片显示数字)
5星 · 超过95%的资源 需积分: 13 25 浏览量
2013-04-11
13:07:41
上传
评论 2
收藏 3KB ZIP 举报
BlackAngel
- 粉丝: 2
- 资源: 2
最新资源
- database-project-massunaAi笔记
- 2%EF%BC%9A%E9%99%95%E8%A5%BF%E
- yyspdz62_944.apk
- SAP公司间采购EDI配置-如何触发自动MIRO.docx
- python197基于图像识别的仪表实时监控系统.rar
- python196基于循环神经网络的情感分类系统.rar
- I2C驱动SHT30温湿度传感器和LCD12864使用例程(RSCG12864B)
- python193中学地理-中国的江河湖泊教学网(django).rar
- python191基于时间序列分析的大气污染预测软件(django).rar
- python190基于人脸识别智能化小区门禁管理系统.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
前往页