加速计事件监听机制

在上一篇中介绍了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 事件分发机制 ——加速计事件监听的更多相关文章

  1. cocos2d-x游戏引擎核心(3.x)----事件分发机制之事件从(android,ios,desktop)系统传到cocos2dx的过程浅析

    (一) Android平台下: cocos2dx 版本3.2,先导入一个android工程,然后看下AndroidManifest.xml <application android:label= ...

  2. cocos2d-x 事件分发机制 ——触摸事件监听

    cocos2d-x 3.0 出来已经好久了,也已经用3.0写了几个小游戏,感觉3.0的事件触发机制太赞了,随这里总结一下.也算是对知识的一种回顾和加深理解. 3.0的事件分发机制中.须要也只须要通过创 ...

  3. 【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher

    一.简介 最近马三换了一家大公司工作,公司制度规范了一些,因此平时的业余时间多了不少.但是人却懒了下来,最近这一个月都没怎么研究新技术,博客写得也是拖拖拉拉,周六周天就躺尸在家看帖子.看小说,要么就是 ...

  4. 浅谈Android中的事件分发机制

    View事件分发机制的本质就是就是MotionEvent事件的分发过程,即MotionEvent产生后是怎样在View之间传递及处理的. 首先介绍一下什么是MotionEvent.所谓MotionEv ...

  5. 本以为精通Android事件分发机制,没想到被面试官问懵了

    文章中出现的源码均基于8.0 前言 事件分发机制不仅仅是核心知识点更是难点,并且还是View的一大难题滑动冲突解决方法的理论基础,因此掌握好View的事件分发机制是十分重要的. 一.基本认识 1. 事 ...

  6. Cocos2d-X研究之v3.x 事件分发机制具体解释

    事件分发机制 " src="http://www.cgzhw.com/wp-content/uploads/2014/07/inherent3.png" style=&q ...

  7. Cocos2d-x 3.2 学习笔记(九)EventDispatcher事件分发机制

    EventDispatcher事件分发机制先创建事件,注册到事件管理中心_eventDispatcher,通过发布事件得到响应进行回调,完成事件流. 有五种不同的事件机制:EventListenerT ...

  8. cocos基础教程(11)事件分发机制

    cocos3.0的事件分发机制: 创建一个事件监听器-用来实现各种触发后的逻辑. 事件监听器添加到事件分发器_eventDispatcher,所有事件监听器有这个分发器统一管理. 事件监听器有以下几种 ...

  9. 【cocos2d-js公文】十七、事件分发机制

    简单介绍 游戏开发中一个非常重要的功能就是交互,假设没有与用户的交互.那么游戏将变成动画,而处理用户交互就须要使用事件监听器了. 总概: 事件监听器(cc.EventListener) 封装用户的事件 ...

随机推荐

  1. 实现js的类似alert效果的函数

    这个简单的类似alert的函数,效果还行,至于css样式,那没的说了,笔者确实尽力了,如果读者觉得太烂,你可以随便改函数的样式的,反正,笔者觉得还可以,呵呵. <!DOCTYPE html PU ...

  2. javascript之事件

    客户端javascript程序采用了异步事件驱动编程模型. 相关事件的几个概念: 事件类型(event type):用来说明发生什么类型事件的字符串: 事件目标(event target):发生事件的 ...

  3. App小样在手机运行了一下

    外包公司把App小样的安装包发过来了,我在安卓手机上试了一把,虽然还只有几个静态页面,但安装那一刻还是小激动了一把. 在某美术系MM的帮助下,我基本掌握了原型软件azure. 事实证明,很多东西都是逼 ...

  4. SQL2005 安装时 “性能监视器计数器要求(错误)” 解决方案

    转自SQL2005 安装时 "性能监视器计数器要求(错误)" 解决方案 出现此类问题一般都是在非法卸载sql2005出现的 在 "开始" -->  &qu ...

  5. 使用jxl.jar操作Excel

    在工程的build path中添加jxl.jar,网址:http://www.andykhan.com/jexcelapi/ import java.io.BufferedReader; import ...

  6. Cloud Insight 客户案例-晨芯时代科技有限公司

    在不断迭代的过程中,Cloud Insight 也很重视客户对产品的使用体验,这次我们拜访了晨芯时代,了解到他们在使用 Cloud Insight 过程中对产品的一些想法. 客户背景 晨芯时代是一家开 ...

  7. Best Sequence

    poj1699:http://poj.org/problem?id=1699 题意:给你nge串,让你求出这些串组成的最小的串重叠部分只算一次. 题解:我的做法是DFS,因为数据范围只有10,就算是n ...

  8. DLL导出与调用约定

    一般来说,从DLL导出函数有两种方法.一种是使用.def文件:另一种是使用__declspec(dllexport). 使用上面两种方法各有优缺点.使用.def文件就是需要额外维护,当导出函数更改名字 ...

  9. 5.android系统裁剪

    我手上的android的SDK,是全志A10方案的android4.0.4.由于公司基于这个平台开发一款设备,需要把android自带的软件以及厂家自带的软件去除掉.就研究如何去裁剪android的a ...

  10. Legal or Not

    Legal or Not Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...