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.移動設備三軸加速度計的座標系是右手座標系。

 

 

以上。 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章