cocos2d-x 事件分发机制 ——加速计事件监听
加速计事件监听机制
在上一篇中介绍了cocos2d-x中的触摸事件机制,这篇来介绍下游戏中也常常常使用到的加速计事件,这些都是游戏中的常常要用到的。
移动设备上一个非常重要的输入源是设备的方向。大多数设备都配备了加速计,用于測量设备精巧或匀速运动时所受到的重力方向。
重力感应来自移动设备的加速计。通常支持X、Y和Z三个方向的加速度感应,又称为三向加速计。
实际应用中,能够依据三个方向的力度大小来计算手机倾斜的角度和方向。
3.0机制中。我们仅仅须要创建一个加速计监听器EventListenerAcceleration,实现响应的回调函数,在回调函数中实现对应的游戏逻辑就可以,最后把创建的监听器注冊到事件分发器_eventDispatcher中就可以。
EventListenerAccerlation的静态create方法中有个Accerlation的參数,这个Accerlation是一个类。包括了加速计获得的三个方向的加速度,代码例如以下:
class Acceleration
{
public:
double x;
double y;
double z; double timestamp; Acceleration(): x(0), y(0), z(0), timestamp(0) {}
};
该类中每一个方向的加速度大小都为一个重力加速度大小。
使用加速度计事件之前,须要先开启硬件设备,逗比的我在用这个之前。没注意到这点,我说为什么我都弄好了,跑出来的效果不是我想象的那样呢,最后发现没有开启硬件设备,有时小小的问题都有可能困扰你半天,到最后你发现竟然是TMD这个错误,感觉自己瞬间就要崩溃的节奏。
开启硬件设备的语句:
Device::setAccelerometerEnabled(true);
创建监听器。创建回调函数。在创建回调函数时。能够用lambda表达式来创建匿名函数,也能够绑定已有的函数。
以下来看一下一个完整的步骤代码,用的是匿名函数:
//重力感应注冊
Device::setAccelerometerEnabled(true);//开启硬件设备
auto listener = EventListenerAcceleration::create([=](Acceleration* acc, Event* event){
auto ptNow = ball->getPosition();//获取精灵球此刻的位置
if(ptNow.x < ball->getContentSize().width/2) {
ball->setPositionX(VisibleRect::right().x);//超出左边界时设为从右边界出来
}
if(ptNow.x > VisibleRect::right().x - ball->getContentSize().width/2) {
ball->setPositionX(VisibleRect::left().x);
}
ball->getPhysicsBody()->setVelocity(Vect((acc->x) *2600.0f ,ball->getPhysicsBody()->getVelocity().y));//获取精灵球的物理属性并依据加速度的大小acc->x设置X方向的速度。Y方向速度不变
});
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, ball);//注冊监听器
加速度计机制和触摸机制都是手游中常常要用到的东西,熟练掌握这些知识能够在开发中大大提升效率,同一时候也能够让代码看起来更清晰。
好了。这篇介绍了加速度计监听器事件的机制和实现方法。下一篇介绍还有一个游戏中不可缺少的机制。游戏中的物理碰撞机制以及碰撞检測等。
cocos2d-x 事件分发机制 ——加速计事件监听的更多相关文章
- cocos2d-x游戏引擎核心(3.x)----事件分发机制之事件从(android,ios,desktop)系统传到cocos2dx的过程浅析
(一) Android平台下: cocos2dx 版本3.2,先导入一个android工程,然后看下AndroidManifest.xml <application android:label= ...
- cocos2d-x 事件分发机制 ——触摸事件监听
cocos2d-x 3.0 出来已经好久了,也已经用3.0写了几个小游戏,感觉3.0的事件触发机制太赞了,随这里总结一下.也算是对知识的一种回顾和加深理解. 3.0的事件分发机制中.须要也只须要通过创 ...
- 【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher
一.简介 最近马三换了一家大公司工作,公司制度规范了一些,因此平时的业余时间多了不少.但是人却懒了下来,最近这一个月都没怎么研究新技术,博客写得也是拖拖拉拉,周六周天就躺尸在家看帖子.看小说,要么就是 ...
- 浅谈Android中的事件分发机制
View事件分发机制的本质就是就是MotionEvent事件的分发过程,即MotionEvent产生后是怎样在View之间传递及处理的. 首先介绍一下什么是MotionEvent.所谓MotionEv ...
- 本以为精通Android事件分发机制,没想到被面试官问懵了
文章中出现的源码均基于8.0 前言 事件分发机制不仅仅是核心知识点更是难点,并且还是View的一大难题滑动冲突解决方法的理论基础,因此掌握好View的事件分发机制是十分重要的. 一.基本认识 1. 事 ...
- Cocos2d-X研究之v3.x 事件分发机制具体解释
事件分发机制 " src="http://www.cgzhw.com/wp-content/uploads/2014/07/inherent3.png" style=&q ...
- Cocos2d-x 3.2 学习笔记(九)EventDispatcher事件分发机制
EventDispatcher事件分发机制先创建事件,注册到事件管理中心_eventDispatcher,通过发布事件得到响应进行回调,完成事件流. 有五种不同的事件机制:EventListenerT ...
- cocos基础教程(11)事件分发机制
cocos3.0的事件分发机制: 创建一个事件监听器-用来实现各种触发后的逻辑. 事件监听器添加到事件分发器_eventDispatcher,所有事件监听器有这个分发器统一管理. 事件监听器有以下几种 ...
- 【cocos2d-js公文】十七、事件分发机制
简单介绍 游戏开发中一个非常重要的功能就是交互,假设没有与用户的交互.那么游戏将变成动画,而处理用户交互就须要使用事件监听器了. 总概: 事件监听器(cc.EventListener) 封装用户的事件 ...
随机推荐
- MINA的session.close
现象:客户端session.close之后,并没有提出,客户端程序一直hold在那里: 解决:调用了session.getService().dispose(false)方法后,客户端程序完成了退出 ...
- 4070: [Apio2015]雅加达的摩天楼
Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 “do ...
- app应用程序本地化--备用
一.简介 * 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言 * 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lpr ...
- centos6.5搭建vpn服务器
1 安装ppp yum install -y ppp 2 安装pptpd yum install pptpd // rpm -Uvh http://poptop.sourceforge.net ...
- 我新买的红米手机,新浪和360浏览器都能进,也能看电视,就是不能上手机QQ和微信
1.请您在桌面下.点击手菜单键-全局搜索,输入网络助手,点击流量排行,点击批量联网控制,查看该软件下(不能上网的应用)wifi和流量2G/3G下方的选项是否都勾选的.如果没有勾选,请您勾选. 2:仍然 ...
- struts一点心得
action中: 设置属性并增加get,set方法,给属性赋值后 (如: private String name; public String getName() { return name; } p ...
- 转:二十、java的抽象类
http://blog.csdn.net/liujun13579/article/details/7737667 现实世界中,人们表征世界时,会把现实世界中的很多类具有相同特征的事物归为一个抽象类.比 ...
- 【原创】如何构建MIPS交叉编译工具链
运行环境:Ubuntu12.04PC提前安装库:flex,bison,libncureses5-dev,texinfo,这些库提前apt-get install.需要重新安装:gawk(先apt-ge ...
- c#4.0新特性之协变与逆变
1.C#3.0以前的协变与逆变 如果你是第一次听说这个两个词,别担心,他们其实很常见.C#4.0中的协变与逆变[1](Covariance and contravariance)有了进一步的完善,主要 ...
- HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))
Car Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...