初学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);
}
本文详细介绍了如何在Cocos2dx中使用加速计功能,通过设置设备加速度传感器并绑定监听器,实现小球位置随设备运动实时变化的交互体验。

1591

被折叠的 条评论
为什么被折叠?



