zoukankan      html  css  js  c++  java
  • COCOS学习笔记--重力感应Acceleration

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

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

    和触摸事件事件一样 重力感应的处理是由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) {}
    };

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

     我们在这之前先建一个带有tegsprite

    #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.移动设备三轴加速度计的坐标系是右手坐标系。

     

     

    以上。 


     

  • 相关阅读:
    第三次作业——《原型设计》
    第二次作业《熟悉使用工具》
    跟着《构建之法》学习软件工程(第一次作业)
    纯js代码实现手风琴特效
    HTML5
    为什么做前端要做好SEO
    让div盒子相对父盒子垂直居中的几种方法
    模板artTemplate
    bootstrap兼容问题
    移动常用的类库
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7201242.html
Copyright © 2011-2022 走看看