.h
class TestClas : public Node{
public:
float time;
Label* label;
TestClass(){};
~TestClass(){};
virtrue bool init();
CREATE_FUN(TestClass);
void refresh(float dt);
}
---------------------------------------------------------------------------------------
.cpp
bool TestClass::init(){
time = 0;
TTFConfig ttfConfig(fontname, fontsize);
label= Label::createWithTTF(ttfConfig, text );
label->setSystemFontSize(fontsize);
label->setString(text);
label->setTextColor(textColor);
this->addChild(label);
this->schedule(schedule_selector(), 0.04f);
}
void TestClass::refresh(float dt){
time+=0.04f; //time+=dt;
label->setString(StringUtils::format("%f", time));
if(time>=60){
this->unschedule(TestClass::refresh);
}
}
-------------------------------------------------------------------------------------------------
基本代码就这样 每隔0.04s时间加0.04, 最后看总共执行的时间, 1分钟的时候停止
但这样写的结果就是time的时间比实际时间会慢,刚开始以为是cocos2dx最快每贞刷新速度比0.04s大,然后将0.04s改为0.07、0.09、0.1、0.12、0.2都出现这样的情况
然后就将TestClass::refresh中的time+=0.04f;改为time+=dt; 就正常了。
估计原因:总定时器的调度器执行每个定时器的时候,需要遍历一遍,当符合当前定时器设置的刷新频率0.04s的时候,就回调执行该方法。在遍历执行过程中会有延迟,即时间比0.04s大,所以总的时间比实际时间会慢。dt是实际的时间间隔。