Cocos2dx重力感应Acceleration,准确来说叫加速度计,加速度计能够感应设备上X、Y、Z轴方向上线性加速度的变化。事实上叫“重力感应”或“重力加速度计”都不如“加速度计”准确,由于作用于三个轴上的加速度是指全部加速度的总和,包含了由重力产生的加速度和用户移动设备产生的加速度。在设备精巧的情况下,这时候的加速度就仅仅是重力加速度。这里为了直观我还是喜欢叫它重力感应哈哈。

在游戏开发中有时会用到这一功能,比方赛车游戏倾斜屏幕时转弯就用到了重力感应。

和触摸事件事件一样 重力感应的处理是由cocos引擎提供了接收加速度计事件的回调函数onAcceleration(),也就是说,在实际开发中 仅仅须要重载加速度计事件,当与设备加速度改变的事件发生时会就调用这一方法。我们能够在CCLayer类中看到这一方法:

virtual void onAcceleration(Acceleration* acc, Event* unused_event);

这一方法传入的第一个參数是一个指向Acceleration类型的变量,Acceleration包括重力感应获得的三个方向的加速度,能够在ccType.h中看到这个类:

class CC_DLL Acceleration
: public Ref
{
public:
double x;
double y;
double z;
//timestamp时间戳属性。用来表示事件发生的相对时间
double timestamp; Acceleration(): x(0), y(0), z(0), timestamp(0) {}
};

以下我们就通过一个使用加速度计的样例来学习:

我们在这之前先建一个带有teg的sprite:

#define TAG  10
//创建一个sprite
auto sprite = Sprite::create("haha.jpg");
//加入
this->addChild(sprite);
//设置tag
sprite->setTag(TAG);
//设置坐标
sprite->setPosition(Vec2(480,320));

1.先在头文件里声明该方法:

//加速度计的回调函数声明
virtual void onAcceleration(Acceleration* acc, Event* unused_event);

2.在.cpp文件里开启加速度计,这一步很重要,是必须的,否则不会检測出设备加速度的变化:

setAccelerometerEnabled(true);

3.在.cpp文件里实现加速度计的回调函数:

#define SPEED 20
void HelloWorld::onAcceleration(Acceleration* acc, Event* unused_event)
{
//通过tag获得sprite
Sprite * _sprite = (Sprite*)this->getChildByTag(TAG);
if (_sprite)
{
//获得sprite坐标
Vec2 vec = _sprite->getPosition();
//获得当前x、y轴坐标
float x = vec.x;
float y = vec.y;
//获得移动距离
double disX = acc->x * SPEED;
double disY = acc->y * SPEED;
_sprite->setPosition(Vec2(x+disX,y+disY));
}
}

好了,栗子做完啦,只是我们要打个包在手机上才干检測出重力感应,在电脑上执行是看不出来的。大家能够打包试试,亲測可用哦!

注意,onAcceleration()方法里的參数acc->x、acc->y、acc->z各自是获得x、y、z轴方向上的加速度,单位为g。1g = 9.81 m s?

2。另外,iOS和Android等设备三轴加速度计的坐标系是右手坐标系,如图:

总结一下:

1.Cocos引擎提供了onAcceleration()方法用于接收加速度计事件的回调函数;

2.作用于三个轴上的加速度是指全部加速度的总和,包含了由重力产生的加速度和用户移动设备产生的加速度;

3.使用onAcceleration()方法前要开启加速度计setAccelerometerEnabled(true)。

4.onAcceleration()里的參数acc->x、acc->y、acc->z各自是获得x、y、z轴方向上的加速度,单位为g;

5.移动设备三轴加速度计的坐标系是右手坐标系。

以上。

COCOS学习笔记--重力感应Acceleration的更多相关文章

  1. COCOS学习笔记--Cocod2dx内存管理(三)-Coco2d-x内存执行原理

    通过上两篇博客.我们对Cocos引用计数和Ref类.PoolManager类以及AutoreleasePool类已有所了解,那么接下来就通过举栗子来进一步看看Coco2d-x内存执行原理是如何的. / ...

  2. cocos学习笔记:快速上手

    cc.Class({ //奇怪的语法风格,cc.class, extends: cc.Component, //扩展自cc.Component properties: { //类的属性设置 jumpH ...

  3. COCOS学习笔记--关于使用cocostudio打安卓包

    我在之前的博客里也写到过,如今cocos引擎提供了一键打包.很方便. 今天正好做个測试,想用引擎的一键打包弄个apk的安卓包.以下就简介一下详细过程和自己的一些理解: 先说一下项目背景,因为我的电脑是 ...

  4. COCOS学习笔记--粒子系统

    一.粒子系统的简单介绍 粒子系统是指计算机图形学中模拟特定现象的技术,它在模仿自然现象.物理现象及空间扭曲上具备得天独厚的优势,为我们实现一些真实自然而又带有随机性的特效(如爆炸.烟花.水流)提供了方 ...

  5. COCOS学习笔记--即时动作ActionInstant

    Cocos引擎中的动作类的关系图例如以下: 能够看出,Action是继承自Ref类的,之前我的博客中也有讲过,Ref类是cocos2dx全部类的基类.动作类(Action)是全部动作的基类.它通过cr ...

  6. COCOS学习笔记--Button类及其相关控件属性

    一.Button介绍 Button就是button.Cocos中提供了Button类对button进行相关的操作.我们看一下Button类继承关系图: 能够看到.Button是继承自Widget类,W ...

  7. COCOS学习笔记--持续动作ActionInterval

    上一篇博客介绍了即时动作ActionInstant.与即时动作相对的是持续动作ActionInterval. 顾名思义,持续动作就是须要一段时间来持续运行的动作,而且在有限时间内改变运行对象的一些属性 ...

  8. COCOS学习笔记--单点触控

    这篇博客来总结下cocos单点触控的相关内容: 我们在Layer类的源代码中能够看到.Layer类提供了一下4个与屏幕单点触控相关的回调方法: onTouchBegan().onTouchMoved( ...

  9. COCOS学习笔记--变速动作Speed和ActionEase

    变速动作和复合动作类似.也是一种特殊的动作,它能够把不论什么动作依照改变后的速度运行.变速动作与复合动作最大的差别就是复合动作仅仅是单纯的组合一系列动作,而变速的做在组合一系列动作后还要去改变动作的运 ...

随机推荐

  1. perl学习之I/O基础

    1.从标准输入进行输入<STDIN> 2.从钻石操作符进行输入<> 3.参数调用@ARGV 4.向标准输出进行输出 5.用printf进行格式化输出 1.<STDIN&g ...

  2. centos7.2快速搭建LAMP平台

    #查看linux系统版本信息 cat /etc/redhat-release 以上是操作系统的所有信息,补充下内核信息参数介绍: 3.10.0-514.26.2.el7.x86_64 3表示主版本号, ...

  3. read content in a text file in python

    ** read text file in pythoncapability: reading =text= from a text file 1. open the IDLE text editor  ...

  4. Python9-内置函数2-day16

    #zip方法 l = [1,2,3] l2 = ['a','b','c'] l3 = ('*','**',[1,2]) l4 = {'k1':1,'k2':2} for i in zip(l,l2,l ...

  5. opencv中相关的矩阵运算

    一.矩阵Mat I,img,I1,I2,dst,A,B;double k,alpha;Scalar s;1.加法I=I1+I2;//等同add(I1,I2,I);add(I1,I2,dst,mask, ...

  6. Spring核心技术(十一)——基于Java的容器配置(一)

    基本概念: @Bean和@Configuration Spring中新的基于Java的配置的核心就是支持@Configuration注解的类以及@Bean注解的方法. @Bean注解用来表示一个方法会 ...

  7. saltstack管理八之常用执行模块

    所有执行模块: http://docs.saltstack.cn/zh_CN/latest/ref/states/all/index.html 常用模块:cmd, cron, file, mount, ...

  8. Linux下安装MySQLdb模块(Python)

    一.MySQLdb-python模块 https://pypi.python.org/pypi/MySQL-python ` 二.安装依赖包 yum -y install python-devel m ...

  9. windows liver writer下载地址

    wlsetup-all.exe 链接:http://pan.baidu.com/s/1bo9pm7X 密码:zchb wlsetup-all简体版.exe 链接:http://pan.baidu.co ...

  10. Working out (DP)

    Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the ...