如何校准UIAccelerometer?

时间:2011-12-01 06:02:03

标签: objective-c ios accelerometer calibration

我正在尝试从ViewA校准我的UIAccelerometer,但我的游戏视图是ViewB。 所以我想要达到的目的就是说让用户在他们身边玩,我希望我的游戏就像他们坐在正常位置时一样玩。

所以在ViewA中我会做这样的事情吗?:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"value1"]);
[[NSUserDefaults standardUserDefaults] setFloat:accelX forKey:@"value1"];

然后在我的Game类中,我会在UIAccelerometer委托方法中执行此操作吗?:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"X-Calibrate"]);
//Low Pass Filter
rollingX = (accelX * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));
    AccelPoint.x += (rollingX*50);

然后我会做类似的事情:

mySprite.position = ccp(accelX, yValue);

我做错了吗?

谢谢!

编辑:ViewB的新代码,我现在还需要某种形式的摩擦吗?

    rollingX = (acceleration.x * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));     

AccelPoint.x += (rollingX*50);

然后在那段代码之后我会设置我的对象的位置。

1 个答案:

答案 0 :(得分:1)

此问题中的示例似乎与您所描述的方式类似:Accelerometer & Calibration - iPhone SDK

View A的示例代码:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"value1"]);

[[NSUserDefaults standardUserDefaults] setFloat:accelX forKey:@" value1"];

这将存储预先校准的值。因此,如果您之前已经校准过,校准的效果将会降至最低。

我想:

[[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"value1"];

你可能会追求更多。这样您就可以在用户的​​起始位置消除重力的全部影响。

你的View B代码看起来很好,但请记住这会让你的角色速度无限增加。考虑添加某种形式的摩擦。