定时器

cocos2dx基础篇(8)——定时器更新schedule/update

否则将追究法律责任。cocos2dx为我们提供了定时器schedule相关的操作。其操作函数的定义在CCNode中,所以基本上大多数的引擎类都可以设置定时器,如cclayer、CCSprite、Ccmenu等。定时器更新的方式分为三类:默认定时器:scheduleUpdate();自定义定时器:schedule();一次性定时器:scheduleOnce();https://github.com/shahdza/Cocos_LearningTest/tree/master/demo_%E5%AE%9A%E

Cocos2d-x笔记记忆整理Day2

定时器由定时调度器控制,每个定时器互不干扰,串行执行。因此当回调函数触发的时刻,CCScheduler的update方法正处于迭代之中,开发者若此时停止或启用其他定时器,将导致CCScheduler的update方法被破坏,这是开发者所不希望看到的。Cocos2d-x的设计中,通常将这种情况以标记的方式避免迭代破坏。

cocos2dx三种定时器的使用

cocos2dx三种定时器的使用以及停止schedule,scheduleUpdate,scheduleOnce今天白白跟大家分享一下cocos2dx中定时器的使用方法。ok,定时器的调用已经讲完,大家不妨自己写一些函数体验一下。这种方式在callfunc_selector,menu_selector等也以同样的方式出现。

【木头Cocos2d-x 032】我是定时器(第01章)—我爱单线程之schedule介绍

我是定时器第01章—我爱单线程之schedule介绍本来今天我应该要做其它事情的,但是和一位网友提起了schedule,我无法按捺心中对写教程的热血和冲动,所以我就决定要写关于schedule的使用心得了。)Cocosd-x提供了一个很好的功能给我们使用,那就是schedule,它是什么东西?我们可以简单地认为它是定时器,是单线程的定时器。为什么我非得强调是单线程,因为多线程是一个恶魔,它很强大,但是会带来很多噩梦!单线程,也就是意味着,它不是多线程。

Cocos2d-x利用schedule实现定时器

每一帧都有我——scheduleUpdate和update新建一个项目,命名为ScheduleUpdate_test.将HelloScene.cpp中的init函数的多余代码删掉,然后我们敲几行代码,如下图所示:MyUpdate是自定义的函数,通过在init中每2秒调用一次该函数,记得在,h文件中声明一下用调试模式运行一下,可以看到:

cocos2d-x调度器原理,mainloop的Update

再来看CCScheduler内,定时器主要分为Update定时器和普通interval定时器。每一帧通过迭代调用链表中节点的Update函数来实现Update定时器。程序首先枚举了每个注册了定时器的对象,然后再枚举对象中定时器对应的CCTimer对象,调用CCTimer对象的update方法来更新定时器的状态,以便触发定时器事件。至此可知,指定定时器后均由定时调度器控制,每个定时器互不干扰,串行执行。

cocos2d -js 解决定时器schedule误差

定时器原理:cocos2d-js底层在每一帧计算中,遍历所有定时器,看是否达到触发时间。看看一个新的定时器:这里核心是then=Now-,每一次触发的时候,把误差算到下次触发的控制中。例如60fps,那么schedule2每16ms触发一次,用户设定了100ms的interval,那么将有16*7=112>100,7帧才触发1次用户的定时器。那么下次将有12+16*6=108>100,只需要96ms就触发第2次用户的定时器,这次提前了4ms,弥补了第1次的误差。这个定时器经得起考验,即使在低帧频情况下,仍