【发布时间】:2012-11-28 03:52:15
【问题描述】:
所以我在我的游戏中进行了基本校准,如下所示: 校准代码:
- (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 设置图像的位置。 这就是问题所在: 校准后,我的图像运动的灵敏度非常高,使其运动非常快。在我校准之前,运动速度很好,所以校准一定有问题。
这里似乎有什么不对的地方,我的计算有问题吗?
谢谢!
【问题讨论】:
-
"calibrationValue 设置为从 NSUserDefaults 读取的值" 我在代码中的任何地方都看不到
calibrationValue。 -
我添加了它。对于那个很抱歉! :)
-
好的,没问题。但是,我仍然没有看到该变量在任何地方使用。你的意思是
calibrationFloat还是这两个不同的变量? (另外,我看到你问了一个相关的问题,答案说你对rollingX的计算不正确。你完全排除了吗?) -
是的,我的问题使用了错误的变量,我更新了它。那个回答者是针对这个问题的:stackoverflow.com/questions/13225713/calibrate-uiaccelerometer 但是,他没有就如何修复 rollingX 计算提供足够具体的答案。我也知道他说要校准 3D 比例,但在这种情况下,我只关心 X 轴。所以不,我没有修复 rollingX 计算错误,因为我不确定错误在哪里或如何解决。
-
第一次在哪里初始化
rollingX?
标签: iphone objective-c ios uiaccelerometer calibration