2011-08-03 49 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