网游中,“时间停止的实现”的设想

  昨日,看了一篇文章“在举国哀悼之日,我仅技术角度分析开心网暂停游戏后恢复存在的问题”。

  文章里讨论了游戏暂停,但是游戏里的时间没有暂停的问题。导致在游戏重开的时候,原本应该收获的“菜”已经腐烂一片了。这个原因的产生,实际上是由于游戏并没有实际上的暂停(服务器可不是说关就关的),只是把链接到服务器的请求转向到一个其他页面而已,所有的游戏数据仍然继续运转,导致恢复链接的时候,游戏数据已经运行了一整天,自然该腐烂的就腐烂了。

  我很同意文章的观点,每个活动都设置了EndTime,在运行的时候读取系统时间和EndTime比较,来决定反馈给玩家的结果。由于游戏运行的时候,不能擅自更改服务器的时间(这会导致很多不可预期的错误),也不合适修改每一个活动的EndTime(量太大,架构太复杂,修改容易出错)。

  换个思路。由于每项活动都要读取系统时间来和EndTime比较,那如果游戏系统自身维护一个SysTime如何。在游戏的时候,读取SysTime,来和EndTime进行比较,来决定反馈给玩家的结果。而如果接到类似的暂停游戏的通知,则暂停SysTime的增加,并将游戏的链接转到“致歉页面”,一旦恢复游戏的运行,则继续维护SysTime的增加。这样,在暂停的前一刻和暂停的后一刻就无缝的连接起来了,就不会产生“菜已经腐烂的遗憾了”。

  而游戏自身维护SysTime也是可行的,将SysTime封装成一个类,定期增加一个值(比如1秒、1分钟)。而用SysTime表示当前距某个时间的秒数(比如说游戏开始运行是2010年1月1日),这个在实际中也是可行的,很多的编程语言里的时间对象就表示为距1900年1月1日的描述。

  以上是我对“时间停止的设想”,欢迎各位网友交流。

原文地址:https://www.cnblogs.com/grenet/p/1718295.html