博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x 事件分发机制 ——加速计事件监听
阅读量:7097 次
发布时间:2019-06-28

本文共 1630 字,大约阅读时间需要 5 分钟。

加速计事件监听机制

在上一篇中介绍了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);//注冊监听器

加速度计机制和触摸机制都是手游中常常要用到的东西,熟练掌握这些知识能够在开发中大大提升效率,同一时候也能够让代码看起来更清晰。

好了。这篇介绍了加速度计监听器事件的机制和实现方法。下一篇介绍还有一个游戏中不可缺少的机制。游戏中的物理碰撞机制以及碰撞检測等。

转载地址:http://oyaql.baihongyu.com/

你可能感兴趣的文章
Rstudio编辑界面美化设置
查看>>
重写对象ToString方法
查看>>
备忘: C++中的 vector 容器
查看>>
smt中查看图片与视频缩略图中,如何获得小视频的长度。
查看>>
图片(img标签)的onerror事件
查看>>
2013应届毕业生“百度”校招应聘总结
查看>>
CentOS系统启动流程
查看>>
SQLite数据库_实现简单的增删改查
查看>>
批量查询 xml的方式 还一种是表变量
查看>>
Java7/8 中 HashMap 和 ConcurrentHashMap的对比和分析
查看>>
Java 实现多线程切换等待唤醒交替打印奇偶数
查看>>
1077. Kuchiguse (20)
查看>>
HotSpot模板解释器目标代码生成过程源码分析
查看>>
c99标准 数据类型
查看>>
一维最大子数组和(续)
查看>>
Hillstone基础上网配置
查看>>
几种session存储方式比较
查看>>
习惯的颠覆
查看>>
HDOJ 1097 A hard puzzle
查看>>
Linux的关机与重启命令
查看>>