加速计事件监听机制

在上一篇中介绍了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. MINA的session.close

    现象:客户端session.close之后,并没有提出,客户端程序一直hold在那里: 解决:调用了session.getService().dispose(false)方法后,客户端程序完成了退出 ...

  2. 4070: [Apio2015]雅加达的摩天楼

    Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼.   有 M 只叫做 “do ...

  3. app应用程序本地化--备用

    一.简介 * 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言 * 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lpr ...

  4. centos6.5搭建vpn服务器

    1 安装ppp yum install -y ppp  2 安装pptpd yum install pptpd   //  rpm -Uvh http://poptop.sourceforge.net ...

  5. 我新买的红米手机,新浪和360浏览器都能进,也能看电视,就是不能上手机QQ和微信

    1.请您在桌面下.点击手菜单键-全局搜索,输入网络助手,点击流量排行,点击批量联网控制,查看该软件下(不能上网的应用)wifi和流量2G/3G下方的选项是否都勾选的.如果没有勾选,请您勾选. 2:仍然 ...

  6. struts一点心得

    action中: 设置属性并增加get,set方法,给属性赋值后 (如: private String name; public String getName() { return name; } p ...

  7. 转:二十、java的抽象类

    http://blog.csdn.net/liujun13579/article/details/7737667 现实世界中,人们表征世界时,会把现实世界中的很多类具有相同特征的事物归为一个抽象类.比 ...

  8. 【原创】如何构建MIPS交叉编译工具链

    运行环境:Ubuntu12.04PC提前安装库:flex,bison,libncureses5-dev,texinfo,这些库提前apt-get install.需要重新安装:gawk(先apt-ge ...

  9. c#4.0新特性之协变与逆变

    1.C#3.0以前的协变与逆变 如果你是第一次听说这个两个词,别担心,他们其实很常见.C#4.0中的协变与逆变[1](Covariance and contravariance)有了进一步的完善,主要 ...

  10. HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))

    Car Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...