2012-12-20 62 views
0

我正在iOS上编写游戏,我正尝试使用加速度计设置响应运动。所以当我在iPhone上开始游戏时,一切都很好,并且加速度计在响应时没有任何问题。但是,当我停止游戏循环(暂停菜单),然后再次启动时,屏幕上的实体跳转到某个位置,然后几秒钟后又回到原位。我相信这是由于游戏循环和加速计三角洲之间的差异而发生的。所以我想知道有什么方法可以在iPhone上设置加速度计,以便在游戏循环更新时只更新值?从UIAccelerometer是否可以设置UIAccelerometer三角洲?

值被读像这样(我只需要在x轴上) - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { accelerometValues[0] = acceleration.x * 0.1f + accelerometValues[0] * (1.0 - 0.1f); }

加速度计的设置如下 [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0/60.0]; [[UIAccelerometer sharedAccelerometer] setDelegate:currentScene];

游戏循环本身从教程由Alex迪纳GameLoop Tutorial采取

回答

0

当你暂停,你可以通过删除委托停止监听加速度事件:

[[UIAccelerometer sharedAccelerometer] setDelegate:nil]; 

然后在游戏重新开始时再次设置加速度计。不应该需要更改返回的数据,只需忽略任何不需要的数据。

+0

谢谢你,工作。我不想改变任何数据,但似乎它被缓存然后释放。 – Setrino

+0

如果您的游戏循环位于不同的线程中,并且该线程的运行循环未运行,那么它可以排队来自加速度计的那些方法调用,因为加速计在游戏暂停时仍在调用委托。这可能是你所看到的。当线程恢复时,所有这些方法调用都会被执行。 – Kekoa

+0

这听起来很合理。再一次感谢你。 – Setrino