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

     

     

    以上。 


     

  • 相关阅读:
    006-STM32+BC26基本控制篇-基础应用-域名申请SSL证书
    005-STM32+BC26基本控制篇-基础应用-域名备案
    004-STM32+BC26基本控制篇-基础应用-购买域名,配置域名解析
    003-STM32+BC26基本控制篇-基础应用-安装Web服务器软件Nginx(.Windows系统)
    002-STM32+BC26基本控制篇-基础应用-测试APP扫码绑定BC26模组并实现APP和开发板之间通过MQTT进行远程通信控制
    Spark实战(六)spark SQL + hive(Python版)
    Spark实战(五)spark streaming + flume(Python版)
    Spark实战(二)Spark常用算子
    Spark面试常见问题(一)--RDD基础
    Spark实战(三)本地连接远程Spark(Python环境)
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7201242.html
Copyright © 2020-2023  润新知