如何在cocos2d 3.0中使用加速度计?

时间:2014-04-05 10:46:56

标签: cocos2d-iphone

我正在使用Cocos2d 3.0进行编程,在Cocos2d 2.0中,我们可以使用以下代码将加速度计添加到app,但是此示例基于类CCLayer,它已在Cocos2d 3.0中弃用,而UIAccelerometer也被IOS中的CMMotionManager取代5.0,所以我想知道如何在Cocos2d 3.0中做到这一点?我用谷歌搜索了一段时间,没有找到任何有用的东西。

-(id) init
{
    if ((self = [super init]))
    {
        // ...
        self.isAccelerometerEnabled = YES;
        // ...
    }
}

-(void) accelerometer:(UIAccelerometer *)accelerometer 
        didAccelerate:(UIAcceleration *)acceleration
{
    // ...
}

===

3 个答案:

答案 0 :(得分:2)

我们已经写了一篇关于这个问题的教程:https://www.makegameswith.us/gamernews/371/accelerometer-with-cocos2d-30-and-ios-7

您需要使用CoreMotion框架。

答案 1 :(得分:1)

嗯,上面给出的教程示例中存在两个问题。

  1. CMMotionManager
  2. 的单个实例
  3. 根据设备的方向,加速度数据变为+ Ve或-Ve。您还需要添加场景作为设备方向更改通知的观察者。
  4. 如果您不想处理这些开销,可以使用CCAccelerometer类。它解决了这两个问题。

    如何使用

    1. 在Build Phases中添加CoreMotion Framework项目。
    2. 复制项目中的CCAccelerometer.hCCAccelerometer.m个文件。
    3. 在Prefix.pch中导入CCAccelerometer.h文件。
    4. 在您要使用加速度计的CCScene中实施<CCSharedAccelerometerDelegate>
    5. 只需调用[CCAcceleroMeter sharedAccelerometer];
    6. 即可在init方法中创建共享实例
    7. 通过调用-(void)onEnterTransitionDidFinish
    8. [CCAcceleroMeter sharedAccelerometer]startUpdateForScene:self];中启动加速度计
    9. 在场景中定义委托方法-(void)acceleroMeterDidAccelerate:(CMAccelerometerData*)accelerometerData
    10. 通过调用-(void)onExitTransitionDidStart
    11. 停止[CCAcceleroMeter sharedAccelerometer]stopUpdateForScene:self];中的加速度计

      您可以在GitHub中找到示例项目。

答案 2 :(得分:1)

以下是示例:

Device::setAccelerometerEnabled(true);
auto accelerometerListener = EventListenerAcceleration::create([this](Acceleration* acc, Event* event)
{
});

getEventDispatcher()->addEventListenerWithSceneGraphPriority(accelerometerListener, this);

还有视频教程https://www.youtube.com/watch?v=Xk6lXK6trxU