Cocos2dx - Scheduler学习理解

admin 2018-3-27 188

Scheduler时间管理器,管理定时回调事件,通过schedule添加定时回调事件,schedule包括:

voidschedule(const ccSchedulerFunc& callback, void *target, float interval,unsigned int repeat, float delay, bool paused, const std::string& key);新版本的函数绑定方式,函数指针类型为std::function<void(float)>,target为回调函数所属类的对象,interval时间间隔即每过多长时间回调一次回调函数,repeat为回调次数0表示一次,delay时间延时只对第一次有效,_elapsed时间片,当第一次时间片大于delay时执行回调以后就不再执行,注意,interval是表示每一次的时间间隔,当为多次时间回调时第一次首先使用_elapsed 跟delay比较当_elasped大于delay时回调第一次,紧接着拿_elasped-delay的值跟interval比较如果大于interval又会执行一次回调,添加的事件是否为暂停的,key类似于标记可以根据标记取消添加的回调事件;

    void unschedule(const std::string& key,void *target);新版本的事件取消方式;

    void schedule(SEL_SCHEDULE selector, Ref*target, float interval, unsigned int repeat, float delay, bool paused);老版本的函数绑定,其他的相同,由于selector可以比较是否相等所以这里没有key;

    void unschedule(SEL_SCHEDULE selector, Ref*target);老版本的事件取消方式;

template<class T>

    void scheduleUpdate(T *target, intpriority, bool paused)回调固定函数update,也就是说给定的target所属类必须提供一个update函数,priority的为回调的优先级,优先级分小于0 的先分发,等于0 再分发,大于0的最后分发,三类中越小越先发;

voidunscheduleAllWithMinPriority(int minPriority);取消所有优先级为给定值的时间回调;

std::set<void*>pauseAllTargetsWithMinPriority(int minPriority); 暂停所有优先级为给定值的时间回调,并返回与该事件绑定的目标target;

std::set<void*>pauseAllTargets();暂停所有对象,并返回与事件绑定的目标对象target

voidresumeTargets(const std::set<void*>& targetsToResume);恢复一组对象的时间回调。

voidunscheduleUpdate(void *target);根据目标对象取消固定时间回调

voidunscheduleAllForTarget(void *target);取消目标对象的所有时间回调事件;

voidpauseTarget(void *target);暂停目标对象的所有时间回调

void resumeTarget(void *target);回复目标所有的时间回调

 

注意:如果移除时间回调事件为当前分发的事件并只有一个回调函数,并不会移除事件元素,事件元素为一个结构体其中包含target,和事件回调函数集合等信息,移除只是移除事件回调函数集合中的回调函数,结构体在下一个时间片没有添加回调函数移除。

Node节点保存了scheduler的实例对象并对scheduler的添加移除等操作进行了,封装所以凡事Node节点的派生类都可以通过Node中预留的接口来设置定时器;

Director导演类启动了scheduler定时器并保存了它的实例对象,可以通过Director::getInstance()->getScheduler()来获取scheduler的实例对象,然后直接调用scheduler预留的接口来注册或移除等操作定时器。


最新回复 (0)
返回