在很多移动设备的游戏使用到了加速度计,Cocos2d-JS引擎提供了访问加速度计传感器的能力。本节我们首先介绍一下加速度计传感器,然后再介绍如何在Cocos2d-JS中访问加速度计。
加速度计
加速度计是一种能够感应设备一个方向上线性加速度的传感器。广泛用于航空、航海、宇航及武器的制导与控制中。线加速度计的种类很多,在iOS等移动设备中目前采用的是三轴加速度计,可以感应设备上X、Y、Z轴方向上线性加速度的变化。如下图所示,iOS和Android等设备三轴加速度计的坐标系是右手坐标系,即:设备竖直向上,正面朝向用户,水平向右为X轴正方向,竖直向上为Y轴正方向,Z轴正方向是从设备指向用户方向。
提示 有人将加速度计称之为“重力加速度计”,这种观点有错误的。作用于三个轴上的加速度是指所有加速度的总和,包括了由重力产生的加速度和用户移动设备产生的加速度。在设备静止的情况下,这时候的加速度就只是重力加速度。
实例:运动的小球
下面我们通过一个实例介绍一下如果通过层加速度计事件实现访问加速度计。该实例场景如下图所示,场景中有一个小球,当我们把移动设备水平放置,屏幕向上,然后左右晃动移动设备来改变小球的位置。
下面我们再看看具体的程序代码,首先看一下app.js文件,它的主要代码如下:
- var HelloWorldLayer = cc.Layer.extend({
- ctor:function () {
- this._super();
- cc.log("HelloWorld init");
- var size = cc.director.getWinSize();
- var bg = new cc.Sprite(res.Background_png);
- bg.x = size.width/2;
- bg.y = size.height/2;
- this.addChild(bg, 0, 0);
- var ball = new cc.Sprite(res.Ball_png);
- ball.x = size.width/2;
- ball.y = size.height/2;
- this.addChild(ball, 10, SpriteTags.kBall_Tag);
- return true;
- },
- onEnter: function () {
- this._super();
- cc.log("HelloWorld onEnter");
- var ball = this.getChildByTag(SpriteTags.kBall_Tag);
- cc.inputManager.setAccelerometerEnabled(true); ①
- cc.eventManager.addListener({ ②
- event: cc.EventListener.ACCELERATION, ③
- callback: function(acc, event){ ④
- var size = cc.director.getWinSize(); ⑤
- var s = ball.getContentSize(); ⑥
- var p0 = ball.getPosition();
- var p1x = p0.x + acc.x * SPEED ; ⑦
- if ((p1x - s.width/2) <0) { ⑧
- p1x = s.width/2; ⑨
- }
- if ((p1x + s.width / 2) > size.width) { ⑩
- p1x = size.width - s.width / 2; ⑪
- }
- var p1y = p0.y + acc.y * SPEED ;
- if ((p1y - s.height/2) < 0) {
- p1y = s.height/2;
- }
- if ((p1y + s.height/2) > size.height) {
- p1y = size.height - s.height/2;
- }
- ball.runAction(cc.place(cc.p( p1x, p1y))); ⑫
- }
- }, ball);
- },
- onExit: function () {
- this._super();
- cc.log("HelloWorld onExit");
- cc.eventManager.removeListeners(cc.EventListener.ACCELERATION); ⑬
- }
- });
上述代码①行开启加速计设备。第②行代码cc.eventManager.addListener是通过快捷方式注册事件监听器对象。第③行代码是设置加速度事件cc.EventListener.ACCELERATION。第④行代码是设置加速度事件回调函数。第⑤行代码是获得屏幕的大小。第⑥行代码是获得小球的大小。
第⑦行代码是var p1x = p0.x + acc.x * SPEED是获得小球的x轴方向移动的位置,但是需要考虑左右超出屏幕的情况,第⑧行代码是 (p1x - s.width/2) <0是判断超出左边屏幕,这种情况下我们需要通过第⑨行代码p1x = s.width/2重新设置它的x轴坐标。第⑩行代码(p1x + s.width / 2) > size.width是判断超出右边屏幕,这种情况下我们需要通过第⑪行代码p1x = size.width - s.width / 2重新设置它的x轴坐标。类似的判断y轴也需要,代码就不再解释了。
回调函数中的参数acc,它是cc.Acceleration类的实例,cc.Acceleration是加速度计信息的封装类,它有4个属性:
x。属性是获得x轴方向上的加速度。单位为g,1g = 9.81 m s−2。
y。属性是获得y轴方向上的加速度。
z。属性是获得z轴方向上的加速度。
timestamp。时间戳属性,用来表示事件发生的相对时间。
重新获得小球的坐标位置后,通过第⑫行代码ball.runAction(cc.place(cc.p( p1x, p1y)))是执行一个动作使小球移动到新的位置。
上述onExit()函数是退出层时候回调,我们在代码第⑬行注销所有加速度事件的监听。
本书交流讨论网站:http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
《Cocos2d-x实战 JS卷》现已上线,各大商店均已开售:
京东:http://item.jd.com/11659698.html
欢迎关注智捷iOS课堂微信公共平台,了解最新技术文章、图书、教程信息
相关推荐
Cocos2D-X开发学习笔记-加速度传感器事件的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/10043417
Cocos2D-X2.2.3学习笔记15(回调动作/动画/加速度)http://blog.csdn.net/hucblog/article/category/2242181
一、运动中的加速度 二、拖动间隐效果(比如子弹的运动轨迹) 三、图形绘制 四、内存回收机制 五、菜单项 六、CCOrbitCamera 七、LayerColor 八、CCsprite精灵 九、Lable 十、动画类 cocos2d-x中的CCArray使用注意 ...
这主要是加速度计和modalViewController。 ==================== 是一个框架,用于为iPod Touch,iPhone,iPad和Mac OS X构建2D游戏,演示和其他图形/交互式应用程序。它基于设计,但不是使用python,而是使用...
让你轻松学会box2d中的使用,以及指导物理模拟中使用手机传感器的应用,比如本文的加速度计的使用
simpleAccelerometerApp 一个简单的应用程序,使用Cocos-2d和Swift显示加速度计数据。 我在添加MotionKit子模块时遇到问题,因此您可能需要自己克隆并添加此仓库。
另外,市面上现在有一些cocos2d方面的书籍,但是我只下载到了《Learn iPhone and iPad Cocos2D Game Development》这本书的电子版,听说网上已经有人在尝试翻译这部书了。不知进度如何。 上面提到的这本书的翻译...
#Cocos2d 3.4 和 iOS > 6.0 使用加速度计的简约示例
加速度计检测(如倾斜到实时) 暂停功能 Cocos2d 子模块 ##设置 Git 递归克隆这个 repo(它有 cocos2d 及其子模块) git clone https://github.com/wilzh40/SBSkeleton.git --recursive 使用打开目录...
三、安装cocos,这里我们使用的是cocos2d-x 3.10,3.10版本,Cocos2d-x与cocos整合升级为Cocos引擎,下载后是exe程序,双击直接安装,很简单。 四、下载自动提示补全词典,我还下载了cocos2dx-3.10-api.lua,把下载...
然后详细地讲解了内存管理、视图和视图控制器、键盘输入和自定义键盘、绘图、触摸事件与手势识别、动画、多媒体播放、容器类、文件系统、同时性编程与定时器、cocos2d基础、连接设备、加速度传感器、地图与链接...
使用您的设备加速度计移动球并尽量避免障碍物到达终点。 在 Google Play 上免费提供 Android 版。 用 Cocos2dx 3.2 和 Box2d 编写。 此 repo不包括 cocos2dx 项目文件(或 JNI 文件)、所需的 android 文件或游戏...