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

来源:互联网 发布:软件测试人员岗位职责 编辑:程序博客网 时间:2024/06/06 13:13

用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执行次数,最好不要用不限重复次数的方式。



0 0
原创粉丝点击