2010-01-21 81 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; 
}