zoukankan      html  css  js  c++  java
  • cocos2dx中的定时器及其分类

    cocos2dx中的定时器分三大类:

    1.帧循环定时器

    2.一次性定时器

    3.自定义定时器

    一.帧循环定时器,顾名思义,每一帧都会执行一次,用于实时性要求比较高的场合,如碰撞检测

    void scheduleUpdate(void);//其实是schedule+Update的组合,即定时执行Update函数的意思 --------启动定时器

    virtual void update(float delta);//这是需要自己实现的虚函数,我们重载(override),update方法以执行我们自己的代码,但是函数名和参数不可更改,float dt是一个没有使用的参数,通过cclog(delta)打印可知,dt=0.016,即刚好是一帧的时间.                                          ---------重载实现自己的代码的函数

    void unscheduleUpdate(void); //取消定时器,                                                               ---------终止定时器

    二.一次性定时器,

    void scheduleOnce(SEL_SCHEDULE selector, float delay);//只定时一次,第一个参数表示要回调用函数,第二个参数表示延时

    typedef void (CCObject::*SEL_SCHEDULE)(float);
    #define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)  //回调函数的类型

    例如我们可以自定为:void updateOnce(float dt);//代表只定时更新一次的意思,此时的参数float dt代表延时,和scheduleOnce中的float delay相等

    void CCNode::unschedule(SEL_SCHEDULE selector);//终止定时器,参数为要终止的定时器回调函数

    三.自定义定时器

    自定义定时器有3 个重载函数,底层都默认调用了scheduleSelector,他的几个参数分别表示,scheduleSelector 回调函数,interval 时间间隔,repeat 重复次数,delay 延时执行。

    void CCNode::schedule(SEL_SCHEDULE selector)
    {
      this->schedule(selector, 0.0f, kCCRepeatForever, 0.0f);
    }//本质同scheduleUpdate 但是可以自己写回调函数,定时间隔也是一帧的时间:0.016s


    void CCNode::schedule(SEL_SCHEDULE selector, float interval)
    {
      this->schedule(selector, interval, kCCRepeatForever, 0.0f);
    }


    void CCNode::schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)
    {
      m_pScheduler->scheduleSelector(selector, this, interval , repeat,delay, !m_bRunning);
    }

    总结:

    1.帧循环定时器是系统规定好了的,只可以通过重载(override)update函数来执行自定义的内容,且定时间隔也是定死的,即0.016s,一帧的时间,取消定时器用unscheduleUpdate(void);

    2.一次性定时器,scheduleOnce(float dt)只能定时一次,回调函数需要自己定义,只能设置延时的参数

    3.自定义定时器,schedule()有三种重载的形式,参数很灵活,可以根据需要来设置.

  • 相关阅读:
    Systemd程序及相关命令
    深入理解SELinux
    Linux系统常见内核问题修复(转发)
    CentOS6.8单用户模式下修改密码
    CentOS6启动流程
    linux中的软、硬链接
    Linux中计划任务、周期性任务设置
    CentOS7.3将网卡命名方式设置为传统方式
    js判断字符串是否有下划线
    判断是否是微信打开
  • 原文地址:https://www.cnblogs.com/ttss/p/4077190.html
Copyright © 2011-2022 走看看