一、默认的定时器

1、定时器函数update

(1)每一个节点都有一个默认的update函数,该函数继承与父类,因此当我们使用默认的update函数时需要对它
进行重写。
// 重写默认update函数
virtual void update(float dt);
(2)函数参数解释:update函数里面有一个float dt的参数,这个参数的意义是上一次调用这个函数到本次调用这个函数中间
间隔了多少秒。对于这个函数参数的意义需要注意一下,游戏设计的过程中通常需要注意到这一点。例如:如果在update
函数体中写位移的逻辑时,需要使“位移增量 * dt”。dt代表update函数执行的两次执行的时间间隔,可以理解为与设备的帧率有关系。假设有A设备,帧率为60帧/s,
B设备,帧率为80帧/s。则dt_A = 1.0/60s, dt_B = 1.0f / 80s。在单位之间1秒内,设备A调用update函数60次,
设备B调用update函数80次。如果update函数体中移动的逻辑不乘以dt:A设备移动为 60 * offset, B设备移动
80 * offset。那么想象一下,一个由于在不同的设备中产生了不同的移动效果合理吗?假如我们在update函数体的位移逻辑中乘以这个dt参数呢?设备A移动:60 * offset * 1 / 60 = offset;
设备B移动:80 *offset * 1 / 80 = offset。这样才是一个合理的游戏规则,而不是一个设计bug。

2、默认定时器函数的调用

 对于默认定时器函数的调用,我们可以使用scheduleUpdate函数来实现,以此执行默认的update函数,并且
每帧执行一次。原理:使用scheduleUpdate()函数来是默认的update函数执行起来的时候,该函数会把当前的节点(类对象:可能
是一个Layer,Node等)添加到指定的队列中。处于该队列中的节点每一帧都会被调用以此默认的update函数。

3、默认定时器函数的关闭

 unscheduleUpdate()函数用来关闭默认的定时器函数,相当于把该节点对象从上述队列中移除。

4、示例

 我们在默认update函数中打印“I love China, I am a Chinese!”,每调用一次该函数都进行一次计数,
当打印5次之后我们关闭这个默认定时器函数的刷新。
// update函数体
void update(float dt)
{static int count = 1;if(5 == count){// 停止调用 this->unscheduleUpDate();}log("I love China, I am a Chinese!");
}

二、自定义定时器

1、定时器函数的自定义

 每一个节点只能有一个默认的定时器函数update,并且该默认函数需要进行重写;但是可以有多个自定义的
定时器函数。例如:
// 自定义定时器函数
void myUpdate(float dt);
void myUpdate(float dt)
{log("my update");
}

2、自定义定时器函数的调用

 通常使用schedule函数来调用自定义的update函数的运行,schedule函数的声明如下:
/*参数说明:
selector:回调函数,即将要调用的定时器函数。SEL_SCHEDULE表示指定回调函数的形式,用于定时器的回调。
interval:表示对回调函数进行两次调用的时间间隔
repeat:表示定时器函数调用的次数,调用次数 = repeat + 1。默认参数是进行无限次调用
delay:表示第一次调用定时器函数之前进行的延时时间。
*/
void schedule(SEL_SCHEDULE selector);
// 和默认定时器函数的调用一样,每一帧都会进行调用
void schedule(SEL_SCHEDULE selector, float interval);
// 立刻调用自定义的update函数,定时器调用的时间间隔是interval
void schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay);
// 延时delay之后调用定时器函数,两次调用的时间间隔是interval,调用repeat+1次
void scheduleOnce(SEL_SCHEDULE selector, float delay);
// 延时delay之后调用一次定时器函数 // 说明:
当然这里还有以lambda表达式的形式调用定时器函数,但是这里就不再罗列出来,有兴趣的可以自行查看。

3、自定义定时器函数的停止

 void unschedule(SEL_SCHEDULE selector); // 关闭某一自定义的定时器函数 // 如果想要关闭当前节点的所有定时器函数,包含默认的定时器,可以使用该函数 void unscheduleAllSelectors();

4、示例:

// 自定义定时器函数
void myUpdate(float dt)
{static int count = 1;if(5 == count){// 关闭自定义定时器函数 this->unschedule(schedule_selecotr(MyClass::myUpdate));}log("I love China, I am a Chinese!");
}// 调用自定义定时器函数
this->schecule(schedule_selecotr(MyClasses::myUpdate), 0.1f);

cocos2dx中的定时器相关推荐

  1. Cocos2dx中零散知识点

    cocos2dx中有三种定时器:schedule,scheduleUpdate,scheduleOnce.功能分别是 每隔几秒调用自定义函数.调用系统默认的update()函数.只调用一次自定义函数 ...

  2. cocos2d-x中的动作分析

    在cocos2d-x中动作的执行调度是受cocos2d-x的全局定时器控制的,当初始完导演后便已经启动用于管理动作的update定时器. bool CCDirector::init(void) {.. ...

  3. java怎么加定时器_JAVA WEB程序中添加定时器

    JAVA WEB程序中添加定时器 //这是我的定时器类,用来定时执行某段任务: package com.my.time; import java.text.ParseException; import ...

  4. Cocos2d-X中实现菜单特效

    Cocos2d-X中能够讲菜单和动作结合起来使用实现菜单特效 程序实例1:使用菜单和动作的组合实现菜单特效<一> #include "MenuItem.h"CCScen ...

  5. cocos2d-x中的curl

    将请求的接口的动作放在互斥锁中进行 1: 2: 3: pthread_mutex_t mutex; 4: pthread_t thread; 5: sem_t * m_structSem; 6: 7: ...

  6. Cocos2d-x中的坐标系

    绘图坐标系:它是最常见的坐标系,与OpenGL采用的坐标系相同,以左下角为原点,向右为X轴正方向,向上为Y轴正方向.在Cocos2d-x中,一切绘图相关的操作都使用绘图坐标系,如游戏元素中的Posit ...

  7. 【cocostudio】发布资源在Cocos2d-x中如何使用

    http://cn.cocos2d-x.org/tutorial/show?id=1945 1. 新版本的加载方式: 使用Cocos Studio 2.0发布的CSB资源更换了加载方式,需要用CSLo ...

  8. 深入cocos2d-x中的touch事件

    深入cocos2d-x中的touch事件 在文章cocos2d-x中处理touch事件中简单讨论过怎样处理touch事件, 那么今天来深入了解下cocos2d-x中是怎样分发touch事件的. 我们最 ...

  9. VC++控制台程序中使用定时器

    我现在项目是一个控制台程序,用到的Win32API都是与界面无关的,今天需要加入定时器刷新的功能,由于没有消息循环,所以WM_TIMER消息应该如何处理呢?综合了下网上找到的资料,写了个简单的demo ...

最新文章

  1. 在Java中使用分隔符(拆分的对立面)连接数组元素的快速简便方法
  2. delphi 执行一个外部程序,当外部程序结束后言主程序立即响应
  3. SAP云平台架构概述
  4. python编写请求参数带文件_转载:如何编写一个带命令行参数的Python文件
  5. JFreeChart(五)之XY图
  6. (网页)swiper.js轮播图插件
  7. CSS浮动(float)属性学习经验分享
  8. node path html模块,深入理解node.js之path模块
  9. DBA警世录:备份重于一切
  10. 动态规划——洛谷1020_导弹拦截(1999年的)
  11. 利用Codejock创建TaskPanel(ToolBox) - 2
  12. kaldi运行thchs30例子
  13. QuickZIP V1.21 源码 【学习SharpZipLib的必看!】【以SharpZipLib为基础完成】【VB.Net】
  14. python excel表格的导入和excel中插入折线图
  15. 360极速浏览器、360浏览器如何清除缓存、清除历史记录、清除cookies
  16. Java实现首字母大写
  17. 茶云个人导航系统v1.2源码 带后台+网易云歌单播放功能+腾讯智能在线客服功能
  18. TPS和QPS 并发量区别;日活 访问量 活跃度
  19. 几何光学学习笔记(3)- 2.1光线经过单个折射球面的折射
  20. python中leap是什么意思_您知道leap是什么意思吗?

热门文章

  1. 数据分析及可视化——京东上销量最高的鞋子
  2. 犀牛Rhino 4.0-6.5 安装说明
  3. 【java学习】EasyExcel的简单使用
  4. 比较水的计算机一区论文,计算机与信息安全学院于SCI一区TOP期刊发表高水平学术论文...
  5. 中文日期格式转成英文日期格式
  6. bios 刷 灵耀14_华硕灵耀14 2020深度体验——这才是正统轻薄本
  7. 将GeoJson面域转换成PPT可编辑的多段线
  8. sigmoid函数是如何诞生的(最大熵原理)
  9. 智慧灯杆三维可视化决策系统平台(数字孪生)-解决方案开发案例
  10. python网站模板下载_Python 的 Web 应用程序模板 - Visual Studio | Microsoft Docs