我试图校准我的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);然后,在该代码之后,我将设置我的对象的位置。
发布于 2011-12-01 14:03:25
这个问题中的示例似乎以与您所描述的类似的方式进行校准: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代码看起来不错,不过请记住,这将使您的角色的速度无限期地增加。考虑加入某种形式的摩擦。
https://stackoverflow.com/questions/8337189
复制相似问题