重力效果

#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);

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值