COCOS学习笔记之定时器

定时器

一开始我以为cocos中的定时器与单片机中的定时器差不多,即它会以一定的时间间隔循环地触发某个特定的函数。
然而,后来发现cocos中的定时器更加强大,它还有一个定时器可以规定系统在多少时间内触发一个函数,但该函数只运行一次。

继承关系

原理介绍

Cocos2d-x调度器为游戏提供定时事件和定时调用服务。所有Node对象都知道如何调度和取消调度事件,使用调度器有几个好处:

  • 每当Node不再可见或已从场景中移除时,调度器会停止。
  • Cocos2d-x暂停时,调度器也会停止。当Cocos2d-x重新开始时,调度器也会自动继续启动。
  • Cocos2d-x封装了一个供各种不同平台使用的调度器,使用此调度器你不用关心和跟踪你所设定的定时对象的销毁和停止,以及崩溃的风险。

在cocos中一共有三种定时器:schedule,scheduleUpdate,scheduleOnce

schedule()

  • 功能:每隔某自定义时间执行某自定义函数
  • 标准格式:this->schedule(schedule_selector(fun),t);//fun为某自定义函数 t为时间
  • 停止方法:停止方法:this->unschedule(schedule_selector(fun));
  • EG:
    首先在HelloWorld.h中声明所要执行的函数:

    void Test(float t);

    然后在HelloWorld.cpp文件中实现:

    void HelloWorld::Test(float t)
    
    {
    
    log("test");
    
    }

    然后执行

    this->schedule(schedule_selector(HelloWorld::Test),1.0f); //表示每隔1.0f执行一次,省略参数则表示每帧都要执行

    运行之后,test每隔1.0f才会被打印一次。

ScheduleUpdate()

  • 功能:程序会每帧都会自动执行一次默认的Update函数。(注:可以理解为schedule的一个特例,固定时间,固定函数)
  • 标准格式:this->scheduleUpdate();
  • 停止方法:this->unscheduleUpdate();
  • EG:

    首先在HelloWorld.h中声明所要执行的函数:

    void Update(float t);

    然后在HelloWorld.cpp文件中实现:

    void HelloWorld::Update(float t)
    
    {
    
    log("test");
    
    }

    然后执行

    this->scheduleUpdate;

    运行之后,test就会源源不断的打印出来

scheduleOnce()

  • 功能:某特定时间后执行某特定函数
  • 标准格式:this->scheduleOnce(schedule_selector(fun),t);
  • EG:

    首先在HelloWorld.h中声明所要执行的函数:

    void Test(float t);

    然后在HelloWorld.cpp文件中实现:

    void HelloWorld::Test(float t)
    
    {
    
    log("test");
    
    }

    然后执行

    this->scheduleOnce(schedule_selector(HelloWorld::Test),1.0f);

    运行之后,test会在1.0f后打印出来、

停止所有计时器

this->unscheduleAllSelectors();

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...