调度器

/**
* 一般情况下,我们都是使用的默认调度器,每一个Node对象,都有一个Scheduler *_scheduler;
* 在初始化该Node时,会调用director->getScheduler();获得这个默认的调度器。
*
* 调用setScheduler设置新的Scheduler以后,之前设置的默认调度器将会被移除
*/
virtual void setScheduler(Scheduler* scheduler);

/**
* 获得调度器对象
*/
virtual Scheduler* getScheduler() { return _scheduler; }
virtual const Scheduler* getScheduler() const { return _scheduler; }

/**
* 判断调度函数是否被调度中
*/
bool isScheduled(SEL_SCHEDULE selector);

/**
* 这个是默认调度器
* 调用update方法,执行调度函数,  每帧都会被调用一次
* 在其内部调用的是scheduleUpdateWithPriority(0)函数,设置了优先级为0,这个函数会每一帧都会被调用
* 拥有比较小的调度值的调度函数会比拥有比较大的调度值的调度函数优先被调用
* 对于每个节点来说,只能有一个个update函数被调度
*/
void scheduleUpdate(void);

/**
* 指定一个自定义的调度优先级
* 拥有比较小的调度值的调度函数会比拥有比较大的调度值的调度函数优先被调用
*/
void scheduleUpdateWithPriority(int priority);

/**
* 停止调度update函数
* 该函数是与scheduleUpdate函数相对应的
*/
void unscheduleUpdate(void);

/**
* 自定义调度器
* @param selector  调度函数
* @param interval  调度时间. 0表示每帧都会被调度. 如果该值为0,那么该函数就与scheduleUpdate一样
* @param repeat    调度函数会被调度repeat + 1次, 可以传入kRepeatForever,表示永远执行调度
* @param delay     进行第一次调度之前,需要延迟的时间
*/
void schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay);
void schedule(SEL_SCHEDULE selector, float interval);

/**
* 单次调度器
*/
void scheduleOnce(SEL_SCHEDULE selector, float delay);

/**
* 自定义调度器,每帧都会被调用
*/
void schedule(SEL_SCHEDULE selector);

/**
* 停止自定义调度器
*/
void unschedule(SEL_SCHEDULE selector);

/**
* 停止所有调度器
* 这个方法不会影响动作的执行
*/
void unscheduleAllSelectors(void);

/**
* Resumes all scheduled selectors, actions and event listeners.
* This method is called internally by onEnter
* 重新启动所有调度器,动作和事件监听器
* 该函数在内部被onEnter函数调用
*/
void resume(void);

/**
* 停止所有调度器,动作和事件监听器
* 该函数在内部被onExit函数调用
*/
void pause(void);

/*
* 在node还在运行的场景下,如果调用了scheduleUpdate,该方法会在每一帧时,自动被调用
*/
virtual void update(float delta);

  • 默认调度器

默认调度器也就是上面说的scheduleUpdate;该调度器在内部调用Node类的update方法,该方法在每一帧绘制之前都会被调用一次。

Cocos2d-x中Node类中默认是没有启用update事件的,因此我们需要重载update方法来执行自己的逻辑代码。通过执行schedulerUpdate()调度器开始每帧执行update方法,如果需要停止这个调度器,可以使用unschedulerUpdate()方法。

  •   自定义调度器
// 开启自定义调度器
schedule(schedule_selector(HelloWorld::updateCustom), 1.0f, kRepeatForever, 0);
// 定义自定义调度器函数  (有一个float参数)
void HelloWorld::updateCustom(float dt)
{
    log("Cocos2d-x Custom schedule");
}
//不需要的时候解除调度器
unschedule(schedule_selector(HelloWorld::updateCustom));
 
 
原文地址:https://www.cnblogs.com/lion-witcher/p/5983774.html