#include "HelloWorldScene.h"
#define FIX_POS(_pos, _min, _max) \
if (_pos <= _min) \
_pos = _min; \
else if (_pos >= _max) \
_pos = _max;
Scene* HelloWorld::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = HelloWorld::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
ball = Sprite::create("CloseNormal.png");
ball->setPosition(visibleSize/2);
this->addChild(ball);
this -> setAccelerometerEnabled(true);
this -> setAccelerometerInterval(0.001);
auto accelerationLitener = EventListenerAcceleration::create(CC_CALLBACK_2(HelloWorld::onAccelerationForBall, this));
Director::getInstance() -> getEventDispatcher() -> addEventListenerWithSceneGraphPriority(accelerationLitener, this);
accelerationFlag = true;
return true;
}
void HelloWorld::onAccelerationForBall(Acceleration* acc, Event* event){
if (!accelerationFlag) {
return;
}
if (ball == nullptr) {
return;
}
auto ballSize=ball->getContentSize();
auto pos=ball->getPosition();
//加速效果
pos.x += acc->x * 9.81f;
pos.y += acc->y * 9.81f;
//确定ball的坐标,如果小于屏幕的左侧就让球的位置等于左侧的位置,如果小球的位置大于屏幕右侧的位置就让他等于右侧的位置。
FIX_POS(pos.x, (ballSize.width/2) , (visibleSize.width-ballSize.width/2) );
FIX_POS(pos.y, (ballSize.height/2), (visibleSize.height-ballSize.height/2));
ball->setPosition(pos);
}