zoukankan      html  css  js  c++  java
  • 调度器

    /**
    * 一般情况下,我们都是使用的默认调度器,每一个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));
     
     
  • 相关阅读:
    python assert断言函数
    Python中错误之 TypeError: object() takes no parameters、TypeError: this constructor takes no arguments
    python 3.5构建WINDOWS推送服务
    Python调用(运行)外部程序
    sqlalchemy相关知识
    利用rabbit_mq队列消息实现对一组主机进行命令下发
    Centos 下安装Zabbix Linux 客户端
    Lynis 2.2.0 :面向Linux系统的安全审查和扫描工具
    防暴力破解 Fail2Ban之python
    linux服务器被攻击处理过程
  • 原文地址:https://www.cnblogs.com/lion-witcher/p/5983774.html
Copyright © 2011-2022 走看看