所以我在我的游戏中做了一个基本的校准,如下所示:校准代码:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
[[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"X-Calibrate"];
}
然后在我的游戏视图中,这些是加速度计的一些定义:
#define kFilteringFactor 0.13
#define MAXXACCELERATION 24
在我的游戏类的 init 方法中,我这样做:
calibrationFloat = [[NSUserDefaults standardUserDefaults] floatForKey:@"X-Calibrate"];
然后我这样做:
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
//Low Pass Filter (gets rid of little jitters) + Calibration value combined
rollingX = ((acceleration.x - calibrationFloat) * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));
}
calibrationFloat 设置为游戏开始前从 NSUserDefaults 读取的值。
然后在游戏循环中我这样做:
int rollingAmount = (IS_IPAD() ? 52 : 44);
CGFloat xFloat = (rollingX * rollingAmount);
pos.x += xFloat < -MAXXACCELERATION ? -MAXXACCELERATION : (xFloat > MAXXACCELERATION ? MAXXACCELERATION : xFloat);
然后我根据 pos.x 设置图像的位置。然而,这就是问题所在: 在我校准之后,我的图像运动的灵敏度非常高,因此它的运动速度非常快。在我校准之前,运动速度很好,所以校准一定是出了问题。
这里有什么不正确的地方吗,我的计算有问题吗?
谢谢!