现在的位置: 首页 > 综合 > 正文

cocos2dx 3.1.1官方demo阅读-AccelerometerTest【加速度传感器】

2017年12月22日 ⁄ 综合 ⁄ 共 1502字 ⁄ 字号 评论关闭
文章目录

初学cocos2dx(3.1.1),希望在看demo的同时能够留下痕迹,按照字母顺序。

Acceleration 加速计,也叫重力计,如图所示。

Acceleration类

class Acceleration
{
public:
    double x;
    double y;
    double z;
    
    double timestamp;
    
    /*x,y,z应该是如图所示的分量,timestamp是什么未知,待等会儿移植到安卓上再研究*/
    Acceleration(): x(0), y(0), z(0), timestamp(0) {}
};

test中的onEnd(),主要是设置了一个小球精灵以及对加速计绑定 监听,然后改变小球位置。

void AccelerometerTest::onEnter()
{
    Layer::onEnter();

	//设置设备的加速度传感器可用
    Device::setAccelerometerEnabled(true);
	//加入监听,回调onAcceleration()
    auto listener = EventListenerAcceleration::create(CC_CALLBACK_2(AccelerometerTest::onAcceleration, this));
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

    auto label = Label::createWithTTF(title().c_str(), "fonts/arial.ttf", 32.0f);
    addChild(label, 1);
    label->setPosition( Vec2(VisibleRect::center().x, VisibleRect::top().y-50) );

    _ball = Sprite::create("Images/ball.png");
    _ball->setPosition(Vec2(VisibleRect::center().x, VisibleRect::center().y));
    addChild(_ball);

    _ball->retain();
}

回调的onAcceleration()

void AccelerometerTest::onAcceleration(Acceleration* acc, Event* event)
{
    /*FIXME: Testing on the Nexus S sometimes _ball is NULL */
    if ( _ball == nullptr ) {
        return;
    }

    auto ballSize  = _ball->getContentSize();

    auto pos  = _ball->getPosition();
	CCLog("acc:(x,y)--->(%f,%f)",acc->x,acc->x);

	//现在还不知道为什么要把坐标*重力的值
    pos.x += acc->x * 9.81f;
    pos.y += acc->y * 9.81f;

	//修订坐标在某个区间范围内
    FIX_POS(pos.x, (VisibleRect::left().x+ballSize.width / 2.0), (VisibleRect::right().x - ballSize.width / 2.0));
    FIX_POS(pos.y, (VisibleRect::bottom().y+ballSize.height / 2.0), (VisibleRect::top().y - ballSize.height / 2.0));
    _ball->setPosition(pos);
}

抱歉!评论已关闭.