定时器——Cocos2d-x学习历程(十一)
1.定时器
利用场景、层和精灵等游戏元素,我们可以构建游戏的框架,但是此时的游戏仍然是静止不动的。在一切游戏中,游戏的状态都会随着时间的流逝而改变,同时我们还需要定时进行一些逻辑判断,例如鱼和子弹的碰撞检测。为了解决以上问题,我们引入了定时器的概念。定时器是以一定时间间隔连续引发游戏事件的工具。很显然,定时器就是使游戏动态变化所需的工具。Cocos2d-x为我们提供了两种方式实现定时机制--使用update方法以及使用schedule方法,下面简要介绍这两种方式。
(1).update定时器
第一种定时机制是Node的刷新事件update方法,该方法在每帧绘制之前都会被触发一次。由于绘图帧率有限,而每次更新最终会反映到画面上,所以在每帧之间刷新一次已经足够应付大部分游戏逻辑处理的要求了。捕鱼的碰撞检测机制就完全可以通过update事件来实现。
Node默认并没有启用update事件,为了启用定时器,我们需要调用scheduleUpdate方法,并重载update以执行自己的代码。对应地,我们可以使用unscheduleUpdate方法停止定时器。
(2).schedule定时器
另一种定时机制是Node提供的schedule方法,可以实现以一定的时间间隔连续调用某个函数。由于引擎的调度机制,这里的时间间隔必须大于两帧的间隔,否则两帧期间的多次调用会被合并成一次调用。所以schedule定时器通常用在间隔较长的定时调用中,一般来说,事件间隔应在0.1秒以上。实际开发中,许多定时操作都通过schedule定时器实现,例如鱼群的定时生成、免费金币的定时刷新等。
Node的schedule方法接受一个函数指针并启动一个定时器,利用schedule方法不同的重载可以指定触发间隔与延时。schedule_selector则是一个把指定函数转换为函数指针的宏,用于创建schedule方法所需的函数指针。传入这个宏的函数应该包含一个float参数,表示距离前一次触发事件的时间间隔。
2.定时器的相关方法
Node的定时器机制是Cocos2d-x调度机制的基础,动作机制实际上也依赖定时器实现。由于Cocos2d-x的调度是纯粹的串行机制,因此所有函数都运行在同一个线程,不会存在并行程序的种种麻烦,这大大简化了编程的复杂性。
3.其他事件
除了定时器会不断地提供触发事件外,Cocos2d-x还为我们提供了一些其他与流程控制相关的事件。
onEnter() 当此节点所在场景即将呈现时,会调用此方法。
onEnterTransitionDidFinish() 当此节点所在场景的入场动作结束后,会调用此方法。如果所在场景没有入场动作,则此方法会紧接着onEnter()后被调用。
onExit() 当此节点所在场景即将退出时,会调用此方法。
onExitTransitionDidStart() 当此节点所在场景的出场动作结束后,会调用此方法。如果所在场景没有出场动作,则此方法会紧接着onExit()后被调用。
这些事件的默认实现通常负责处理定时器和动作的启用与暂停,因此必须在重载方法中调用父类的方法。
例如,我们可以在场景开始时设置游戏的背景音乐:
void GameScene::onEnter()
{
Scene::onEnter();
this->playBackgroundMusic();
}
定时器——Cocos2d-x学习历程(十一)的更多相关文章
- 来自一个电子狂的stm32学习历程
文章尾部有学习时的一些视频资料在学的可以看看那么我们就进入今天的主题我stm32的学习历程 在学习了51单片机之后,早已经对单片机这个东西甚有了解了,所有不管是从内部资源,还是一些常见应用,都可以说的 ...
- Nginx系列0:Nginx学习历程
Nginx学习历程 一.初识Nginx 1.Nginx适用于哪些场景 (1)静态资源服务 通过本地文件系统提供服务 (2)反向代理服务 Nginx的强大性能 缓存 负载均衡 (3)API服务 Open ...
- Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC
内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...
- 我的Linux学习历程:那些我看过的Linux书籍们
[+]查看原图http://www.ituring.com.cn/article/119401 来北京工作已经一个多月,大都市的生活比起读大学要忙碌得多,尤其是出行,基本以小时为基本的计时单位.有时茫 ...
- StudyJams学习历程总结
Study Jams 是一个学习 Google 在线课程的活动.该活动由学员自发组建课程学习小组,旨在带领小组成员入门 Android 开发,最终将 Android App 上载至 Google Pl ...
- 大三仍是Linux系统小白的我给大家讲讲学习历程
我与Linux结缘是在大三的时候.我与Linux熟识是在偶然遇到<Linux就该这么学>的时候.因为我是电子信息工程专业,在高年级时开设了嵌入式课程,嵌入式系统是一种专用的计算机系统,作为 ...
- 登录模块的进化史,带大家回顾java学习历程(二)
接着前面的登录模块的进化史,带大家回顾java学习历程(一) 继续往下面讲 前面我们去实现登录功能,都是想着要完成这个功能,直接在处理实际业务的类中去开始写具体的代码一步步实现,也就是面向过程的编程. ...
- Linux学习历程——Centos 7重置root密码
一.自述 最近刚刚接触linux,因为我设置密码比较随性,把自己做系统的时候设置的root密码给forget,每当系统崩溃,重新把虚拟机备份还原后,就面临无法登陆的尴尬情况,只得重置root密码,好了 ...
- python3.4学习笔记(十一) 列表、数组实例
python3.4学习笔记(十一) 列表.数组实例 #python列表,数组类型要相同,python不需要指定数据类型,可以把各种类型打包进去#python列表可以包含整数,浮点数,字符串,对象#创建 ...
随机推荐
- 使用repeater开发出现 回发或回调参数无效 的问题
我的就是因为没有加IsPostBack,导致在页面每次刷新时都生成一遍,造成重复绑定Repeater控件,以致事件验证出错,加上就好了 protected void Page_Load(object ...
- 使用float属性布局时父元素高度不能自适应的解决方法
在网页的布局过程中,经常会用到float属性来实现页面的左右布局,但是有个问题就是父元素的高度并不能根据子元素的高度自适应.比如下面这段代码: <!DOCTYPE html> <ht ...
- solr4.5分组查询、统计功能介绍
说到分组统计估计大家都不会陌生,就是数据库的group by语句,但是当我们采用solr4.5全文检索时,数据库提供再好的sql语句都没有任何的意义了,那么在solr4.5中我们如何做到分组统计呢?其 ...
- %1 不是有效的 Win32 应用程序
客户环境windows server 2008,iis 6.0. 站点配置与以往并无差别,更新类库后出现“%1 不是有效的 Win32 应用程序”错误,如下图: 系统登录页面可以正常加载,登录过程中出 ...
- 用JS做图片轮播
脚本之家 首页应用手游攻略教程 ﹤首页 >> 网络编程 >> JavaScript >> 网页特效 >> 图象特效 js 图片轮播(5张图片) 作者:m ...
- Oracle 物理DG切换
在进行DATA GUARD的物理STANDBY切换前需要注意:确认主库和从库间网络连接通畅:确认没有活动的会话连接在数据库中:PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态 ...
- Unicode解码、URL编码/解码
+ (NSString *) stringByReplaceUnicode:(NSString *)string { NSMutableString *convertedString = [strin ...
- socket 通信之select
对于socket 通信,大家很多都用的单线程通信.同时只能监听一个端口,只能响应一个服务,select的方式可以解决多个socket 被连接的问题.一次可以分配多个资源,只要一个连接便可以进行通信.在 ...
- HDU 1232(畅通工程)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定一具有N个节点的图和其边集,求其集合数量. [题目分析] 并查集经典题...其实就是创建好并查集就行了.. [算法流程] 于 ...
- Http网络请求
前提说明: 1.Str.Empty 其实就是 string.Empty 2.@object.IsNull() 的IsNull() 是判断“是否等于null”的扩展方法,等同于 @object==nu ...