0

我正在尝试UIAccelerometer从 ViewA 校准我的,但我的游戏视图是 ViewB。所以我几乎想要实现的是假设用户在他们身边玩,我希望我的游戏表现得就像他们以正常姿势坐着玩一样。

那么在 ViewA 中我会做这样的事情吗?:

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

然后在我的游戏类中,我会在我的 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);

然后在该代码之后,我将设置我的对象的位置。

4

1 回答 1

1

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

您的视图 A 示例代码:

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

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

这将存储一个预先校准的值。因此,如果您以前曾进行过校准,校准的影响将会最小化。

我认为只是:

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

可能更多的是你所追求的。这样,您将在用户的起始位置消除重力的全部影响。

您的视图 B 代码看起来不错,但请记住,这将使您的角色的速度无限增加。考虑增加某种形式的摩擦。

于 2011-12-01T14:03:25.017 回答