在我的应用程序中,我使用加速度计来控制游戏中的角色。现在我只允许纵向,因此用户必须向右或向左倾斜设备才能移动角色。到目前为止工作正常。我现在想要完成的是“校准”加速度计以说明用户正在播放的当前倾斜度。假设用户侧身躺着,值会出现偏差,因为它没有考虑到该起点,因此他们将无法控制角色。因此,我试图计算初始倾斜量,然后在游戏期间对其进行计算,但它不起作用。
所以我在非游戏视图中有一个按钮来“校准”加速度计,这是它执行的代码:
这是在 IBAction
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0f/30.0f];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
这是加速度计委托调用
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
[[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"X-Calibrate"];
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
}
然后在我的游戏视图中,我将 iVarcalibrationFloat 设置为我在 NSUserDefaults 中设置的值。然后我也有一个 kFilteringFactor 来摆脱小抖动。所以这是游戏加速度计委托方法,它将rollingX设置为等于一切,然后我根据rollingX移动角色:
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
rollingX = ((acceleration.x - calibrationFloat) * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));
}
但是这不起作用,校准似乎没有做任何事情,我不知道为什么。有没有人设置为什么这不起作用?