【问题标题】:Accelerometer not working after uploading game to the App Store将游戏上传到 App Store 后加速度计不工作
【发布时间】:2011-08-03 09:59:32
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 如果您不介意告诉我们...您的游戏名称是什么?
  • 在此问题之后,我通过更改可用日期从应用商店中删除我的游戏,因为它是付费游戏
  • 尝试清理您的项目并再次测试,您可能不小心更改了某些内容而在测试时没有注意到。上传到应用商店的内容通常是从头开始创建的,因此如果您不从干净的项目中进行测试,可能会弹出奇怪的错误。

标签: iphone cocos2d-iphone app-store accelerometer


【解决方案1】:
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];

}

【讨论】:

  • 感谢您发布答案!虽然代码 sn-p 可以回答这个问题,但添加一些附加信息仍然很棒,比如解释等 ..
猜你喜欢
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多