なんかの Log

良い感じで投げっぱなしにしてみせる。

Cocos2dでAccelerometerを有効化

タッチと同じ感じでいけるかと思いきや詰まったので書いておく。

環境

Tool Version
XCode 4.6.1
Cocos2d v2.1-rc1

コード

UIAccelerometerDelegateを実装する必要があるので宣言。

Sample : CCLayer <UIAccelerometerDelegate> {

}

タッチと同じようにCCLayerを継承したシーンでAccelerometerを有効化。

// initとかに
self.accelerometerEnabled = YES;

メソッドをオーバーライド。

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    CCLOG(@"呼んだ?");
}

なんか読んでくれない。で調べたらiOSの方のメソッドを呼んで上げる必要があるようだ。

        [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1 / 60];
        [[UIAccelerometer sharedAccelerometer] setDelegate:self];
//      [[UIApplication sharedApplication] setIdleTimerDisabled:YES];

これで呼んでくれるようになった。setIdleTimerDisableはスリープを防ぐためのもの。今回は必要ないのでコメントアウトしてます。

画面遷移したら必要もないので外しておきます。

- (void)onExit {
    [[UIAccelerometer sharedAccelerometer] setDelegate:nil];
//  [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
    [super onExit];
}

そんな感じで。

参考

Accelerometer not working on restart of scene.