繁体   English   中英

实现游戏计时器的最有效方法是什么

[英]What is the most efficient way of implementing a game timer

我正在写一个 iPhone 游戏。 当用户迈出第一步时,计时器会以 0.01 秒的间隔启动。 显示时间的 UILabel 也会每次更新。 在 iPod touch 2nd gen 和 iPhone 3GS 上进行测试时,我注意到 iPod 速度较慢(20 秒后,iPhone 显示 00:20,00,而 iPod 显示 ~00:10,00)。 有没有办法让这更可靠? 如果我是对的,NSTimer 应该在其 ow 线程上运行,并且不应被用户交互阻止。

JNK

NSTimer 文档指出:

由于典型运行循环管理的各种输入源,定时器时间间隔的有效分辨率被限制在 50-100 毫秒的数量级。 如果计时器的触发时间发生在 run loop 处于未监视计时器的模式或长时间调用期间,则计时器不会触发,直到 run loop 下一次检查计时器。 因此,计时器潜在触发的实际时间可能是预定触发时间之后的一段相当长的时间。

所以准确度可以差到 0.1,而不是 0.01 秒。 更不用说您的线程是否因某种原因被阻塞了。 所以如果你的射击时间很关键,你应该看看其他的东西。 阅读这篇SO 帖子以了解开始。 Apple 有一个节拍器示例代码(其中,显然时间是至关重要的),但我现在找不到它。

在任何情况下,如果您使用 NSTimer 实现计时器,您应该记录您的开始时间。 然后,每当您更新界面时,只需取当前时间和开始时间的差值(使用 NSDates)。

确保您的计时器不是基于睡眠或延迟。 您应该始终根据自程序启动或当前时间以来的时钟滴答数等内容更新计时器

对不起,我不太熟悉你的语言

您不能依赖计时器以指定的时间间隔准确运行,因此您显示的时间应始终通过获取时间间隔差异来计算。 而且我怀疑 iPhone 上的计时器是否可以每 1 毫秒运行一次,在 Quartz 中,每 16 毫秒左右可能会收到一次计时器调用,达到 60 fps - 因此将其安排在 1 毫秒可能意味着“尽快运行”,在不同的硬件上可能会有很大的不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM