我在写iPhone游戏。当用户进行第一次移动时,计时器以0.01秒的间隔进行踢球。显示时间的UILabel也会每次更新。 我在iPod touch二代和iPhone 3GS,该iPod的较慢测试时发现(20秒的iPhone显示00后:20,00和iPod显示〜00:10,00)。有没有办法让这个更可靠?如果我是正确的,那么NSTimer应该在它的ow线程上运行,并且不应该被用户交互阻塞。什么是实现游戏计时器的最有效方式
JNK
我在写iPhone游戏。当用户进行第一次移动时,计时器以0.01秒的间隔进行踢球。显示时间的UILabel也会每次更新。 我在iPod touch二代和iPhone 3GS,该iPod的较慢测试时发现(20秒的iPhone显示00后:20,00和iPod显示〜00:10,00)。有没有办法让这个更可靠?如果我是正确的,那么NSTimer应该在它的ow线程上运行,并且不应该被用户交互阻塞。什么是实现游戏计时器的最有效方式
JNK
的的NSTimer文档状态:
由于各种输入的源的 典型运行循环管理,时间间隔 用于定时器的 有效分辨率被限制为上 的50-顺序100毫秒。如果在 运行循环是一种模式,是不是 监视定时器或长 标注过程中出现 计时器的烧成时间,计时器不火,直到 下一次运行循环检查 计时器。因此,在 的实际时间将定时器触发潜在可 是时间 预定发射时间后,显著的时期。
所以精度可坏0.1,不时0.01秒。更不用说如果你的线程由于某种原因被阻塞。所以如果你的射击时间很关键,你应该看看其他的东西。阅读此SO post开球。苹果公司有一个节拍器示例代码(其中显然时机很关键),但我现在找不到它。
在任何情况下,如果要实现用的NSTimer计时器,你应该记录你的开始时间。然后,无论何时更新界面,只需将当前时间和开始时间的差异(使用NSDates)即可。
确保你没有一个基础关闭计时器或休眠延迟。自启动程序或当前时间
,对不起,我不熟悉你的语言,如时钟的周期数你应该总是更新基于事物的计时器
你不能依靠定时器的方式运行在指定的时间间隔,所以您显示的时间应始终通过计算时间间隔差异来计算。我怀疑,在iPhone上的定时器可以运行每隔1毫秒,在石英有可能得到一个计时器调用每16毫秒左右,使60 fps的 - 所以安排它在1ms的可能尽快意味着“运行“,这在不同的硬件上可能会有很大不同。
0.01s!= 1ms。 0.01s = 10ms。 1s = 1000ms。 – Mytheral