您的位置:首页 > 移动开发 > Cocos引擎

关于cocos2d::Scheduler的调用重复次数问题

2016-12-08 11:14 253 查看
用schedule函数设置了一个间隔0.1秒不限重复次数的定时任务,在定时任务回调函数中加载图片资源,每次加载一个,直到完成时立即调用unschedule移除定时任务。当图片文件很小的时候没有任何问题,但是加载大图时,在调用了unschedule之后这个定时任务仍然被执行了一次,通过研究引擎源码终于发现了问题所在。

void Timer::update(float dt)
{
...
...
while (_elapsed >= interval)
{
trigger(interval); // 调用定时任务
_elapsed -= interval; // 这行是关键
_timesExecuted += 1;

if (!_runForever && _timesExecuted > _repeat)
{
cancel();
break;
}

if (_elapsed <= 0.f)
{
break;
}
}
}
原来是因为一帧执行时间太长,使_elapsed超过了interval的两倍以上。

后来在调用schedule时明确指定了重复次数repeat参数,程序终于按照预设行事了。

因此如果你需要精确控制schedule执行次数,最好不要用不限重复次数的方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2d-x