2010-06-11 55 views
1

我有兴趣构建基于计时器的游戏,比如黑手党战争或类似的游戏。我被困在一个问题上。计时器在主屏幕上运行iPhone - Objective C

即使应用程序已关闭,保留计时器的最佳方法是什么?

我应该根据设备时钟来做这个吗?或者我应该设置一个时间到服务器,并获得设备启动的时间?

如果有人知道更好的办法,

让我知道。 谢谢。

@lessfame

回答

0

如果你只需要保留的时间,并显示多少时间过去了,因为游戏被关闭(即你不需要通知用户,当时间到了),你可以使用[NSDate timeIntervalSinceNow]方法来确定两次之间传递的毫秒数量。

+0

CFAbsoluteTimeGetCurrent是UTC(带有手摇跃点),不是本地时间。 – 2010-06-11 18:41:16

+0

@tc:固定它,好抓。 – Senseful 2010-06-12 00:52:57

0

如果您要说明自己想知道某个事件发生后的时间,那么您只需记录初始时间,然后记录最终时间并比较差异。

如果您需要某个事件的倒数计时器,那么您所做的就是设置一个本地推送通知集,以在最终时间结束。

1

我会将您的问题解释为“衡量应用启动之间所用时间的最佳方法是什么?”而不是“我的应用程序关闭时如何让定时器启动?”。

没有可靠和准确的方法来测量设备断电时的时间(远程服务器可能无法到达,如果天气阴天,可能无法进行天文测量......)。不要打扰。也就是说,大多数CF/NS API使用CFAbsoluteTime/NSDate(即CFRunLoopTimerGetNextFireDate()和 - [NSTimer fireDate])。如果系统时钟发生变化,我不确定他们做了什么。

你可以使用mach_absolute_time()(它在某些事情中被内部使用),但这只是系统正常运行时间,所以如果电话重新启动,它就会失败。我不确定您是否可以获取启动UUID以查明手机是否已重新启动。

在一天结束时,CFAbsoluteTimeGetCurrent()或(等价地)[NSDate日期]可能就足够了;只要确保你的应用程序的行为合理,如果时间在任何方向突然改变一两天。

是的,用户可以通过设置系统时钟来游戏系统。偶尔与服务器同步并跟踪同步之间的游戏时间,可以在一定程度上缓解这种情况。如果经过的游戏时间和服务器时间之间的差异很小,则只需适当加快或减慢游戏速度,以​​实时实现已过去的“游戏时间”。如果更改较大,则可以从服务器上的最后一个保存点进行恢复,或者让用户等待,直到服务器时间或其他一些事情经过游戏时间。这意味着你不能开始播放,直到初始同步,但用户必须在线下载应用程序,所以它不是一个主要问题。