zoukankan      html  css  js  c++  java
  • 网游中,“时间停止的实现”的设想

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

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

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

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

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

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

  • 相关阅读:
    vim 常用命令
    centos 安装mysql
    centos部署ftp
    centos 6.8部署nginx
    ndk学习16: unix domain socket
    ndk学习14: 进程
    ndk学习13: proc
    ndk学习11: linux内存管理
    ndk学习10: linux文件系统
    ndk学习9: 动态使用共享库
  • 原文地址:https://www.cnblogs.com/grenet/p/1718295.html
Copyright © 2011-2022 走看看