将游戏上传到App Store后,Accelerometer无法正常工作

时间:2011-08-03 09:59:32

标签: iphone cocos2d-iphone app-store accelerometer

我做了一个太空游戏,你使用加速度计来移动宇宙飞船,当我在我的设备(iPad,iPhone)上尝试游戏时,它运行良好,没有错误或不正确的行为。

我将我的游戏上传到App Store并获得批准,但是当我从App Store下载游戏时,加速度计无法正常工作,我的太空船被卡在一个方向。

我尝试了很多设备,他们都有同样的问题。

注意:我使用了cocos2d和box2d框架。

如果有人有任何想法,请帮忙!

1 个答案:

答案 0 :(得分:0)

Use UIAccelerometerDelegate 

UIAccelerometer *accelerometer;

In .m file

# pragma mark To Enable Acceleromete

self.isAccelerometerEnabled = YES;
self.accelerometer = [UIAccelerometer sharedAccelerometer];
self.accelerometer.updateInterval = 0.025;
self.accelerometer.delegate = self;


Use these delegates methods

#pragma Mark Accelerometer

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
        // Set up variables
        CGSize winSize = [CCDirector sharedDirector].winSize;

        #define kFilteringFactor 0.5
        #define kShipMaxPointsPerSec (winSize.height*0.5)        
        #define kRestAccelX (xCallib)
        #define kMaxDiff 0.2
        #define kRestAccelY (yCallib)
        #define kMaxDiffY 0.1

        UIAccelerationValue rollingX=0;
        float accelX;

        // High pass filter for reducing jitter
        rollingX = (acceleration.x * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));    

        accelX = acceleration.x - rollingX;

        // Calculate movement for x and y axis
        float accelDiffX = accelX - kRestAccelX;///
        float accelFractionX = accelDiffX / kMaxDiff;//
        movementX = kShipMaxPointsPerSec * accelFractionX;


        // Thresh holds for x and y axis movement
        willMoveX = YES;

        if (((movementX < 45.0f) && (movementX > -45.0f)))
            willMoveX = NO;
}

#pragma Mark Accelerometer Update Methods

-(void) update:(ccTime)dt
{
    CCSprite *player =(CCSprite *) [self getChildByTag:objPlayerShipTag];

    CGSize screenSize = [[CCDirector sharedDirector]winSize];

    float oldX = [player position].x;
    float newX; 

    if (willMoveX) { 
        newX = [player position].x + (movementX * dt);
    } else newX = oldX;

    if ((newX > (screenSize.width -45)) || newX < 45.0f ) {
        newX = oldX;
    }

[player setPosition:ccp(newX,90)];

// ++++++++ To generate Bullet and Bomb Power +++++++

[self checkForCollisionWithPowersBullets]; //NEW
[self checkForCollisionWithPowersBomb];

}