在很多游戏中,倒计时算是很常见的功能,但倒计时这块功能却并不是那么简单,有很多细节需要注意。
下面我来说下倒计时功能的简单实现方法:
为了显示倒计时函数我们需要知道 系统时间,根据增加的系统时间去判定剩余时间(有些游戏会根针数去判定倒计时,这样会导致不同配置的电脑玩有不同的效果,这种做法是很不推荐的,但也有一些游戏用针数做判定,比如武林群侠传的 钓鱼系统 和 打猎好像也是)。
比如我要写一个隔段时间领取奖励的类:
class Reward{
public:
Reward();//这里假设所有的初始化都已经在里面进行了
~Reward();//假设这里不会有内存泄露
void drawTime()
{
int coolTime = m_finishTime - getSystemTime() /*假设一个获得系统当前时间的函数*/;
coolTime = Max(coolTime , 0);//保证冷却时间大于0
m_pLabel->setText( pConvertFunc( coolTime ).c_str() );
}
void resetCoolTime()
{
finishTime = 20 + getSystemTime();
}
typedef std::string (*pConvert)(int time);//将时间转换成字符串形式的函数指针类型
pConvert pConvertFunc;
private:
cocos2d::CCLabelTTF *m_pLabel ;//显示时间的控件这里 借用cocos2d 里的标签控件
int m_finishTime;//保存的是完成的时间 这个时间等于 冷却时间+领取时的系统时间
static int const CoolTime = 20;
};
当然还要有一个每针或 间隔一段时间去调用它的函数
在cocos2d 里可以使用schedule 或 Callfunc_XX 。
。在这里我是保存完成时间而不是直接保存冷却时间了,这样做的好处就是无论你间隔多少秒去调用void drawTime() ,倒计时的计算都不会有错误。