是否可以设置 UIAccelerometer delta?

Posted

技术标签:

【中文标题】是否可以设置 UIAccelerometer delta?【英文标题】:Is it possible to set UIAccelerometer delta? 【发布时间】:2012-12-20 14:07:09 【问题描述】:

我正在 ios 上编写游戏,并尝试使用加速度计设置响应运动。所以当我在 iPhone 上开始游戏时,一切都很好,加速度计响应没有问题。但是当我停止游戏循环(暂停菜单),然后重新开始时,屏幕上的实体会跳到某个地方,然后几秒钟后又回到原位。我相信这是由于游戏循环和加速度计的增量之间的差异而发生的。所以我想知道有没有办法将 iPhone 上的加速度计设置为仅在游戏循环更新时更新值?

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 Diener GameLoop Tutorial 的教程

【问题讨论】:

【参考方案1】:

当您暂停时,您可以通过移除委托来停止侦听 Accelerometer 事件:

[[UIAccelerometer sharedAccelerometer] setDelegate:nil];

然后在游戏恢复时再次设置加速度计。不需要更改返回的数据,只需忽略您不需要的任何数据。

【讨论】:

谢谢你,成功了。我不想更改任何数据,但它似乎被缓存然后释放。 如果您的游戏循环在不同的线程中并且该线程的运行循环没有运行,那么它可以将来自加速度计的这些方法调用排队,因为当游戏运行时加速度计仍在调用委托暂停。那可能就是你所看到的。当线程恢复时,所有这些方法调用都会被执行。 这听起来很合理。再次感谢您。

以上是关于是否可以设置 UIAccelerometer delta?的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序处于非活动状态时可以接收 UIAccelerometer 更新吗?

UIAccelerometer 和 UIScrollView

UIAccelerometer距离计算

UIAccelerometer 和 UIScrollView

UIAccelerometer 校准后更灵敏?

如何校准 UIAccelerometer?