cocos-js,时间相关的处理
1.原因客户端在成功登陆后会从服务器收到一个登陆时间,然后开始让时间走起来,现在有两种走法: 1.单起一个全局定时器,每一次update后让秒数+1,但是这种走法在游戏切换到后台后,定时器被挂起,时间就停止了,当游戏再从后台切换到前台后,就会不准,还有当定时器加速或者减速的时候,时间也会不准 2.选择方法1会普遍遇到,因为每个人在玩游戏的时候,因为一个电话或者别的事情就会经常切换到后台,而方法2只有不正常玩游戏的玩家故意修改时间的时候才会遇到,而这种玩家也会经常使用游戏修改器之类的工具来修改客户端数据,应该从广义上属于一种作弊行为。 所以,我们会选择 3.实现1.时间初始化 initTime:function(_server_time){ this.server_login_time = _server_time this.server_login_time *= 1000 this.cur_time = new Date().getTime() this.dis_time = this.cur_time - this.server_login_time var loginDate = new Date(this.server_login_time) this.server_login_day = loginDate.getDate() this.server_login_hour = loginDate.getHours() this.server_login_minute = loginDate.getMinutes() this.server_login_second = loginDate.getSeconds() this.cur_day = this.server_login_day this.cur_hour = this.server_login_hour this.cur_minute = this.server_login_minute this.cur_second = this.server_login_second } 2.获取当前时间 getCurTime:function(){ return new Date().getTime()-this.dis_time },getCurDay:function(){ return new Date(this.getCurTime()).getDate() },getCurHour:function(){ return new Date(this.getCurTime()).getHours() },getCurMinute:function(){ return new Date(this.getCurTime()).getMinutes() },getCurSecond:function(){ return new Date(this.getCurTime()).getSeconds() },getCurTimeByHMS:function(){ return this.getCurHour() + ":" + this.getCurMinute() + ":" + this.getCurSecond() }, 3.倒计时 //_start_time:必须是服务器返回的时间错 //_down_time:单位/秒 getCutDownTimeByMS:function(_start_time,_down_time){ var __time_dis = this.getCurTime()/1000 - _start_time if(__time_dis > _down_time) return 0 __time_dis = _down_time - __time_dis var __minute = parseInt(__time_dis/60) var __second = parseInt(__time_dis%60) getFuncBit(__minute) > 1 ? (__minute = __minute):(__minute = "0"+__minute) getFuncBit(__second) > 1 ? (__second = __second):(__second = "0"+__second) return __minute + ":" + __second return __down_date.getMinutes() + ":" + __down_date.getSeconds() }, 4.思考之前的两种方法,都不是十全十美,都会遇到各自的问题,有没有更好的方法呢?想来想去,还是在时间的校验上多做处理,就是在客户端和服务器的每条协议,服务器都向客户端发送当前时间,这样就能做到实时校验,避免时间错误导致的问题。但是,这样处理后,不知道服务器那边会不会出现问题? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |