网游中,“时间停止的实现”的设想
2010-04-23 08:35
405 查看
昨日,看了一篇文章“在举国哀悼之日,我仅技术角度分析开心网暂停游戏后恢复存在的问题”。
文章里讨论了游戏暂停,但是游戏里的时间没有暂停的问题。导致在游戏重开的时候,原本应该收获的“菜”已经腐烂一片了。这个原因的产生,实际上是由于游戏并没有实际上的暂停(服务器可不是说关就关的),只是把链接到服务器的请求转向到一个其他页面而已,所有的游戏数据仍然继续运转,导致恢复链接的时候,游戏数据已经运行了一整天,自然该腐烂的就腐烂了。
我很同意文章的观点,每个活动都设置了EndTime,在运行的时候读取系统时间和EndTime比较,来决定反馈给玩家的结果。由于游戏运行的时候,不能擅自更改服务器的时间(这会导致很多不可预期的错误),也不合适修改每一个活动的EndTime(量太大,架构太复杂,修改容易出错)。
换个思路。由于每项活动都要读取系统时间来和EndTime比较,那如果游戏系统自身维护一个SysTime如何。在游戏的时候,读取SysTime,来和EndTime进行比较,来决定反馈给玩家的结果。而如果接到类似的暂停游戏的通知,则暂停SysTime的增加,并将游戏的链接转到“致歉页面”,一旦恢复游戏的运行,则继续维护SysTime的增加。这样,在暂停的前一刻和暂停的后一刻就无缝的连接起来了,就不会产生“菜已经腐烂的遗憾了”。
而游戏自身维护SysTime也是可行的,将SysTime封装成一个类,定期增加一个值(比如1秒、1分钟)。而用SysTime表示当前距某个时间的秒数(比如说游戏开始运行是2010年1月1日),这个在实际中也是可行的,很多的编程语言里的时间对象就表示为距1900年1月1日的描述。
以上是我对“时间停止的设想”,欢迎各位网友交流。
文章里讨论了游戏暂停,但是游戏里的时间没有暂停的问题。导致在游戏重开的时候,原本应该收获的“菜”已经腐烂一片了。这个原因的产生,实际上是由于游戏并没有实际上的暂停(服务器可不是说关就关的),只是把链接到服务器的请求转向到一个其他页面而已,所有的游戏数据仍然继续运转,导致恢复链接的时候,游戏数据已经运行了一整天,自然该腐烂的就腐烂了。
我很同意文章的观点,每个活动都设置了EndTime,在运行的时候读取系统时间和EndTime比较,来决定反馈给玩家的结果。由于游戏运行的时候,不能擅自更改服务器的时间(这会导致很多不可预期的错误),也不合适修改每一个活动的EndTime(量太大,架构太复杂,修改容易出错)。
换个思路。由于每项活动都要读取系统时间来和EndTime比较,那如果游戏系统自身维护一个SysTime如何。在游戏的时候,读取SysTime,来和EndTime进行比较,来决定反馈给玩家的结果。而如果接到类似的暂停游戏的通知,则暂停SysTime的增加,并将游戏的链接转到“致歉页面”,一旦恢复游戏的运行,则继续维护SysTime的增加。这样,在暂停的前一刻和暂停的后一刻就无缝的连接起来了,就不会产生“菜已经腐烂的遗憾了”。
而游戏自身维护SysTime也是可行的,将SysTime封装成一个类,定期增加一个值(比如1秒、1分钟)。而用SysTime表示当前距某个时间的秒数(比如说游戏开始运行是2010年1月1日),这个在实际中也是可行的,很多的编程语言里的时间对象就表示为距1900年1月1日的描述。
以上是我对“时间停止的设想”,欢迎各位网友交流。
相关文章推荐
- 用C#用C#实现窗体在规定时间弹出,例如:10:00.弹出后关闭。并在5分钟后再次弹出。5次后停止。最好有具体代码实现窗体在规定时间弹出,例如:10:00.弹出后关闭。并在5分钟后再次弹出。5次后停止。最好有具体代码
- 一行代码实现多线程任务执行规定时间后自动停止
- boost.asio定时器dealine_timer,实现可以随时控制启动停止和设置时间。
- js实现定时器,时间倒计时为0后停止
- 牛刀小试:使用Reactive Extensions(Rx),一行代码实现多线程任务执行规定时间后自动停止
- 牛刀小试:使用Reactive Extensions(Rx),一行代码实现多线程任务执行规定时间后自动停止
- 用C#用C#实现窗体在规定时间弹出,例如:10:00.弹出后关闭。并在5分钟后再次弹出。5次后停止。最好有具体代码实现窗体在规定时间弹出,例如:10:00.弹出后关闭。并在5分钟后再次弹出。5次后停止。最好有具体代码
- java timer 实现在指定时间执行方法
- php 获取今天、昨天、明天时间戳的简单实现方法
- 23、STM32 上系统精确延时与获取 micro 时间函数的实现(FreeRTOS 中也能移植)
- 页面置换算法LRU实现--leetcode O(1)时间复杂度
- 定义栈的数据结构在Theta(1)时间复杂度内实现min,pop,push操作
- 纯JS实现动态时间显示
- 用脚本实现虚拟机的开始 停止 安装 重置 快照
- 我的时间管理——充分利用WindowsPhone、Android等设备,实现真正的无压工作!
- Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定
- LeetCode 135. Candy (O(n)时间 O(n)和O(1)空间的两种实现)
- jQuery实现动态地获取系统时间
- [置顶] javascript 定时器 实现时间自动更新的特效
- 面试题(实现一个栈,要求实现Push、Pop、Min的时间复杂度为O(1))