首页 > 代码库 > Cocos2d-x3.2 重力感应

Cocos2d-x3.2 重力感应

//GameScene.h

#include "cocos2d.h"

USING_NS_CC;

class GameScene : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();
    
    virtual bool init();
    
    void menuCallback(Ref* pSender);
    
    //重写重力感应函数
    virtual void didAccelerate(Acceleration* acc, Event* event);
    
    CREATE_FUNC(GameScene);
    
private:        //注意不能用auto关键字
    Size size;
    Sprite *sprite;
};



//GameScene.cpp

//  Created by Jacedy on 14-8-11.

#include "GameScene.h"

USING_NS_CC;

cocos2d::Scene* GameScene::createScene()
{
    auto scene = Scene::create();   //创建一个场景
    auto layer = GameScene::create();   //创建一个图层
    scene->addChild(layer);
    return scene;
}

//初始化当前的图层
bool GameScene::init()
{
    if(!Layer::init())      //初始化父类
        return false;
    
    //获取屏幕大小
    size = Director::getInstance()->getVisibleSize();
    //auto size = Director::getInstance()->getWinSize();
    //添加一个图片精灵
    sprite = Sprite::create("OnePiece_1.png");
    sprite->setPosition(Vec2(size.width/2, size.height/2));
    sprite->setTag(12);
    this->addChild(sprite);
    
    //开启重力感应
    Device::setAccelerometerEnabled(true);
    
    //创建事件监听对象
    auto listener = EventListenerAcceleration::create(CC_CALLBACK_2(GameScene::didAccelerate, this));
    
    //在事件监听器中注册
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
    
    return true;
}

void GameScene::didAccelerate(Acceleration* acc, Event* event)
{
    //使精灵随重力感应移动
    auto sprite = this->getChildByTag(12);      //通过标签获取精灵

    auto pos = sprite->getPosition();
    
    pos.x += acc->x;
    pos.y += acc->y;
    //pos.y += acc->y * 10;     //调整敏感度
    
    sprite->setPosition(pos);
}

void GameScene::menuCallback(Ref* pSender)
{
    
}