zoukankan      html  css  js  c++  java
  • 加速度计

    1.调用cclayer的方法setAccelerometerEnabledtrue)在层里启用重力感应。


    2.启用重力感应后,重力方向变化时,会回调cclayer的方法didAccelerate( CCAcceleration* pAccelerationValue ),在自己派生的层里重写此方法.

    pAccelerationValue包含x,y,z三个方向的重力值(由手机在这3个方向的偏移决定)

    一般在这个回调函数里得到一次重力感应主角的偏移距离,然后在update里把主角的当前位置加上这个距离



    7.5 加速度计(1

    除了触摸,移动设备上一个很重要的输入来源是设备的方向,因此大多数设备都配备了加速度计,用于测量设备静止或匀速运动时所受到的重力方向。

    目前,加速度计在传统PC平台上尚未提供支持,因此在正式开始探索重力感应之前,还请读者参考附录A,将Cocos2d-x工程部署到手机或其他移动设备上。现在,AndroidiOS平台均支持加速度计。

    重力感应来自于移动设备的加速度计,通常支持XYZ三个方向的加速度感应,所以又称为三向加速度计。在实际应用中,可以根据3个方向的力度大小来计算手机倾斜的角度或方向。

    和触摸事件一样,重力感应的处理先被引擎抽象为一个触摸代理协议,然后由CCLayer提供了一个简化的实现,屏蔽了注册到重力感应器等一系列细节。在开发中,我们只需要重载一个简单的事件即可:


    1. virtual void didAccelerate(CCAcceleration* pAccelerationValue);

    其中CCAcceleration是一个结构体,包含了加速度计获得的3个方向的加速度,相关代码如下:


    1. typedef struct
    2. {
    3.     double x;
    4.     double y;
    5.     double z;
    6.     double timestamp;
    7. } CCAcceleration;

    为了便于游戏开发的使用,这个结构体中每个方向的加速度大小都以一个重力加速度为单位(即CCAcceleration结构中1单位的加速度等于重力加速度约9.8 m/s2)。举例来说,把手机平放在桌子上时,获得的加速度应该是(010)。正常使用时,总的加速值应该在1上下拨动。如果检测到一个大幅度偏离1的加速度时,则可以判断为突然动作:摇动手机时,会在一个或多个方向上出现很大的加速;投掷或坠落则容易检测到很小的加速。我们可以利用这些特性为游戏添加一些很有趣的控制效果。

    我们可以尝试引入两个新特性:根据手机的倾斜方向转动炮台的方向,摇动手机来开火。和处理触摸事件时类似,我们建立一个加速检测层,将检测到的事件交由代理处理,相关代码如下:


    1. class AccelerationLayerDelegate
    2. {
    3. public:
    4.     virtual void swing(int direction)=0;
    5.     virtual void shakes()=0;
    6. };
    7. class AccelerationLayer : public CCLayer
    8. {
    9.     int swingCnt; //记录连续的倾斜
    10.     int shakeCnt; //记录连续的摇晃
    11. public:
    12.     CC_SYNTHESIZE(AccelerationLayerDelegate*, m_pDelegate, Delegate);
    13. public:
    14.     LAYER_NODE_FUNC(AccelerationLayer);
    15.     bool init();
    16.     virtual void didAccelerate(CCAcceleration* pAccelerationValue);
    17. };

    这里我们使用了两个成员变量来记录摇晃和倾斜的次数,其作用为对重力感应事件产生缓冲,从后面的处理函数可以看到我们做了三个处理。

    首先,需要区分正常加速和用力摇晃设备,它们的区别就在于总加速度是否异常。我们设定用力摇晃设备时的总加速度大小应该大于2倍重力加速度,这样的处理忽略了手机在下落中处于失重状态,因为通常我们只会左右摇晃设备。


  • 相关阅读:
    2020年勒索软件攻击最多的四大漏洞
    物联网时代,我们还能有哪些隐私?
    区块链技术最重要价值所在
    为什么云遣返不仅仅是从公共云回到内部部署环境
    如何应对越来越多的物联网勒索软件威胁?
    如何将边缘计算与核心系统集成
    莫唱衰:5G开局很快,但原力呈现才刚刚开始
    云原生架构支撑千万级DAU游戏
    变革型AI、无代码与低代码——哪一种才是企业AI部署的理想途径?
    nginx代理的配置和文件访问权限配置
  • 原文地址:https://www.cnblogs.com/yssgyw/p/3456116.html
Copyright © 2011-2022 走看看