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. $monitor用法

    1.$monitor 进程同一时间有且仅有一个,若多次调用$monitor,新进程会代替以前的monitor进程. 2.$fmonitor可以同时存在任意个. 3.一般不用$monitor系统函数. ...

  2. PyQt5(1)——QToolTip, QPushButton, QMessageBox, QDesktopWidget

    #面向对象方法 import sys from PyQt5.QtWidgets import QApplication, QWidget, QToolTip, QPushButton, QMessag ...

  3. django 12天(跨域,文件上传,下载,cookie,session)

    django 12天(跨域,文件上传,下载) 跨域 什么是跨域 1.协议不同 2.端口不同 3.主机不同 如何解决跨域 1.安装django-cors-headers模块 2.在settings.py ...

  4. 9-Python基础知识-day1

    Python基础知识-day1 Python 2 和Python 3 的区别: Python2 源码不标准,混乱,重复代码多:#-*-encoding:utf8 -*- 解决python2显示中文的问 ...

  5. .NET:权限管理

    题外话: 临近大四,编写各种简历的时候发现,很多电子简历上是可以链上自己在各大论坛上留下的足迹.关于这点,学习网络,拥抱开源,具有互联网思维的博主很后悔,后悔当年只会在网上查资料,不会留资料,空有才能 ...

  6. luogu3755 [CQOI2017]老C的任务

    扫描线水题. #include <algorithm> #include <iostream> #include <cstdio> using namespace ...

  7. 对 Servlet 的改进

    通过上一篇博客:Servlet 的详解 http://www.cnblogs.com/ysocean/p/6912191.html,我们大致知道了 Servlet 的基本用法.但是稍微分析一下 Ser ...

  8. 图论trainning-part-1 B. A Walk Through the Forest

    B. A Walk Through the Forest Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %I64 ...

  9. 树状数组 Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) C. Fountains

    C. Fountains time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  10. 【Ts 3】Nginx的Http(图片)服务器配置+ftp上传使用说明

    在前两篇博客中提到了搭建Nginx和Ftp服务器,在本篇博客,主要是介绍Nginx的配置文件的使用,怎样修改配置文件使其成为一个图片服务器. 一.Nginx图片服务器配置 <span style ...