Акселерометр не работает после загрузки игры в App Store - PullRequest
0 голосов
/ 03 августа 2011

Я сделал космическую игру, в которой вы используете акселерометр для перемещения космического корабля. Когда я пробую игру на своих устройствах (iPad, iPhone), она работает хорошо, без ошибок или некорректного поведения.игра в App Store, и она была одобрена, но когда я загрузил игру из App Store, акселерометр не работал, и мой космический корабль завис в одном направлении.

Я перепробовал много устройств, и все онита же проблема.

Примечание: я использовал фреймворки cocos2d и box2d.

Если у кого-нибудь есть идеи, пожалуйста, помогите!

1 Ответ

0 голосов
/ 22 сентября 2012
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];

}
...