2

我一直在为 iPhone 编写一个使用 OpenGL ES 2.0 的 c++ 游戏引擎。但是,在使用加速度计时,我得到了奇怪的结果。

我有一个角色,它通过加速度计的输入在 2D 世界中移动。最初,当游戏开始时,移动会延迟 10 秒。延迟是指如果您倾斜手机以将角色向右移动,则直到 0.5 秒后,角色才会向右移动。我通过调用以下代码解决了这个问题:

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.updateInterval = 1.0f/60.0f;
accel.delegate = self;

调用此代码后 2 秒,而不是同时:

displayLink = [self.window.screen displayLinkWithTarget:self selector:@selector(drawFrame)];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

出于某种原因,这导致倾斜在启用后立即正常工作。

但是,如果您多次触摸屏幕触发触摸开始和触摸结束功能,则倾斜将再次不同步,直到 15 秒左右才会再次同步。

应该注意的是,帧速率永远不会低于 60,并且加速度计方法似乎不会低于每秒更新 60 次,但不知何故会不同步。

谢谢。

4

1 回答 1

0

通过从使用 UIAccelerometer 切换到 CMMotionManager,我已经修复了所有加速度计问题。我仍然不确定导致问题的原因,但从 CMMotionManager 获取加速度计数据似乎已经解决了任何问题。

于 2013-07-20T05:25:43.060 回答