开发环境: coco2d-x 2.2.4
以纹理图片的方式来实现,时间倒记时显示:
直接上代码:
// 头文件中需要添加相应变量
// GameLayer.h 文件
using namespace cocos2d;
// GameLayer布景类
class GameLayer : public cocos2d::CCLayer
{
// . . . 部分代码省略
public:
int _timeCounter; // 倒计时模式的计数器
CCArray* _numsSpriteArray; // 图片编号
CCTexture2D** _textureNums; // 纹理图片数组
};
// 实现文件中添加相应的方法
GameLayer.cpp 文件
// init() 初始化的方法中新增代码
bool GameLayer::init()
{
_timeCounter = 600; // 初始化倒记时时间
InitTimeSprite(); // 初始化时间精灵
this->schedule(schedule_selector(GameLayer::DrawTime),1.0f);// 回调方法
}
void GameLayer::InitTimeSprite()
{
// 创建精灵数组
_numsSpriteArray = CCArray::create();
// 引用计数加一
_numsSpriteArray->retain();
// 创建纹理图片数组
_textureNums = new CCTexture2D*[10];
// 将整数转换成string类型的方法
// 拼接字符串
std::string part1 = "pic/time/number";
std::string part3 = ".png";
// 初始化10张纹理图
for(int i = 0;i<10;i++)
{
std::stringstream intTostr;
std::string part2;
intTostr<<i;
intTostr>>part2;
std::string partAll = part1+part2+part3;
_textureNums[i] = CCTextureCache::sharedTextureCache()->addImage(partAll.c_str());
}
int minute = _timeCounter/60; // 计算分钟数字
int second = _timeCounter%60; // 计算秒数字
float position_X = 220;
float position_Y = 50;
// 创建数字精灵
CCSprite *nums0 = CCSprite::createWithTexture(_textureNums[minute/10]);
nums0->setPosition(ccp(position_X,position_Y)); // 设置位置
this->addChild(nums0,DASHBOARD_LEVEL_DQX); // 添加到层 static const int DASHBOARD_LEVEL_DQX = 5; // 时间显示层
_numsSpriteArray->addObject(nums0); // 添加时列表
//创建数字精灵
CCSprite *nums1 = CCSprite::createWithTexture(_textureNums[minute%10]);
nums1->setPosition(ccp(position_X+20,position_Y));
this->addChild(nums1,DASHBOARD_LEVEL_DQX);
_numsSpriteArray->addObject(nums1);
CCSprite *nums2 = CCSprite::createWithTexture(_textureNums[second/10]);
nums2->setPosition(ccp(position_X+60,position_Y));
this->addChild(nums2,DASHBOARD_LEVEL_DQX);
_numsSpriteArray->addObject(nums2);
CCSprite *nums3 = CCSprite::createWithTexture(_textureNums[second%10]);
nums3->setPosition(ccp(position_X+80,position_Y));
this->addChild(nums3,DASHBOARD_LEVEL_DQX);
_numsSpriteArray->addObject(nums3);
//创建分号精灵
CCSprite* breakmark = CCSprite::create("pic/time/breakmark.png");
breakmark->setPosition(ccp(position_X+40,position_Y));
this->addChild(breakmark,DASHBOARD_LEVEL_DQX);
}
//绘制时间的方法
void GameLayer::DrawTime(float dt)
{
if(_timeCounter<=0)
{
this->unscheduleAllSelectors();
// 显示归零
((CCSprite*)_numsSpriteArray->objectAtIndex(0))->setTexture(_textureNums[0]);
((CCSprite*)_numsSpriteArray->objectAtIndex(1))->setTexture(_textureNums[0]);
((CCSprite*)_numsSpriteArray->objectAtIndex(2))->setTexture(_textureNums[0]);
((CCSprite*)_numsSpriteArray->objectAtIndex(3))->setTexture(_textureNums[0]);
//去失败界面
// goLoseLayer();
}
else
{
//计数器减一
_timeCounter--;
//计算分钟数组
int minute = _timeCounter/60;
//计算秒数字
int second = _timeCounter%60;
((CCSprite*)_numsSpriteArray->objectAtIndex(0))->setTexture(_textureNums[minute/10]);
((CCSprite*)_numsSpriteArray->objectAtIndex(1))->setTexture(_textureNums[minute%10]);
((CCSprite*)_numsSpriteArray->objectAtIndex(2))->setTexture(_textureNums[second/10]);
((CCSprite*)_numsSpriteArray->objectAtIndex(3))->setTexture(_textureNums[second%10]);
}
}
// 删除纹理图片数组
GameLayer::~GameLayer()
{
if (_textureNums)
{
delete [] _textureNums;
}
}