coco2d-x2.2.4 时间倒记时显示

开发环境: 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;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值