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

本文详细介绍了如何在Cocos2dx中使用加速计功能,通过设置设备加速度传感器并绑定监听器,实现小球位置随设备运动实时变化的交互体验。

初学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);
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值