我正在尝试从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);
然后在那段代码之后我会设置我的对象的位置。
答案 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代码看起来很好,但请记住这会让你的角色速度无限增加。考虑添加某种形式的摩擦。