2011-08-03 39 views
0

我制作了一个空间游戏,您可以使用加速度计移动飞船,当我在我的设备(iPad,iPhone)上尝试游戏时,它运行良好,没有错误或行为不正确。将游戏上传到App Store后加速度计不工作

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

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

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

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

+0

如果您不介意告诉我们...您的游戏名称是什么? – Toastor

+0

在此问题之后,我通过更改可用日期从应用商店删除我的游戏,因为它是付费游戏 – ouss

+0

尝试清理项目并再次测试,您可能在测试过程中意外更改了某些内容并未发现它们。上传到应用商店通常是从零开始创建的,所以如果你不从一个干净的项目进行测试,可能会出现奇怪的错误。 – Carter

回答

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]; 

} 
+1

感谢您发布一个答案!虽然代码片段可以回答这个问题,但添加一些附加信息仍然很棒,比如解释等。 – j0k