2010-01-21 82 views
6

如何正確校準我的iPhone遊戲加速計?目前,當手機在平坦的表面上時,槳葉漂移到左側。高或低通濾波器不是一個可接受的解決方案,因爲即使在較低的值下,我也需要完全控制槳。我知道Apple有BubbleLevel示例,但我發現很難遵循...有人可以簡化這個過程嗎?iPhone加速計校準

我的加速度計的代碼如下所示:

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 

float acelx = -acceleration.y; 
float x = acelx*40; 

Board *board = [Board sharedBoard]; 
AtlasSprite *paddle = (AtlasSprite *)[board.spriteManager getChildByTag:10]; 

if (paddle.position.x > 0 && paddle.position.x < 480) { 
    paddle.position = ccp(paddle.position.x+x, paddle.position.y); 
} 

if (paddle.position.x < 55) { 
    paddle.position = ccp(56, paddle.position.y); 
} 

if (paddle.position.x > 435) { 
    paddle.position = ccp(434, paddle.position.y); 
} 

if (paddle.position.x < 55 && x > 1) { 
    paddle.position = ccp(paddle.position.x+x, paddle.position.y); 
} 

if (paddle.position.x > 435 && x < 0) { 
    paddle.position = ccp(paddle.position.x+x, paddle.position.y); 
} 
} 

謝謝!

回答

9

好的,問題已解決,解決方案如此簡單我實際上很尷尬,我沒有早點想出它。它是如此簡單:

在「校準按鈕」:

//store the current offset for a "neutral" position 
calibration = -currentAccelX * accelerationFactor; 

在遊戲中的時間加速功能:

//add the offset to the accel value 
float x = (-acceleration.y * accelerationFactor) + calibration; 

這就像把偏移一樣簡單。 * 隱藏他的頭 *

+0

這裏的主題進行了全面的解釋http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/39833-tutorial-accelerometer-calibration-optimizations.html – 2011-11-01 15:56:01

+2

是的,我寫了那篇文章;) – user2393462435 2011-11-12 17:38:04

+0

這是一箇舊的線程,但我很好奇什麼類型的對象currentAccelX是什麼,加速因子是什麼。你能幫助嗎? – 2012-05-11 04:27:55

0

這是我的代碼至今:

//calibrate code from StackOverflow 
float calibration = -acceleration.x * accelerationFraction; 
float x = (-acceleration.y * accelerationFraction) + calibration; 

//My original code 
accelerationFraction = acceleration.y*2; 
if (accelerationFraction < -1) { 
    accelerationFraction = -1; 
} else if (accelerationFraction > 1) { 
    accelerationFraction = 1; 
} 
//API CHANGE set delegate to self 
if (orientation == UIDeviceOrientationLandscapeLeft){ 
    accelerationFraction *= -1; 
}