iPhone加速度计校准

6

如何为我的iPhone游戏正确校准加速度计?目前,当手机放在平面上时,挡板会漂移到左侧。高通或低通滤波器不是可接受的解决方案,因为我需要即使在低值和高值时也能完全控制挡板。我知道苹果有BubbleLevel示例,但我觉得它很难跟进...有人能简化这个过程吗?

我的加速度计代码如下:

-(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);
}
}

感谢您!
2个回答

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;

这很简单,只需添加偏移量即可。* 隐藏他的头 *

这是该主题的全面解释:http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/39833-tutorial-accelerometer-calibration-optimizations.html - Alexei Sholik
这是一个旧的帖子,但我很好奇currentAccelX是什么类型的对象,accelerationFactor又是什么。你能帮忙解答一下吗? - SimplyKiwi
是的,你从哪里得到了那些变量;currentAccelX和accelerationFactor?这篇帖子早在2011年就过时了...我知道现在它甚至更老了,但也许有人可以帮助我?谢谢。 - marciokoko
这是我目前的代码: //从StackOverflow校准代码 float calibration = -acceleration.x * accelerationFraction; float x = (-acceleration.y * accelerationFraction) + calibration;accelerationFraction = acceleration.y*2; if (accelerationFraction < -1) { accelerationFraction = -1; } else if (accelerationFraction > 1) { accelerationFraction = 1; } //API更改将委托设置为self if (orientation == UIDeviceOrientationLandscapeLeft){ accelerationFraction *= -1; } - marciokoko
1
请阅读我在此处的解释:http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/39833-tutorial-accelerometer-calibration-optimizations.html - user2393462435

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接