cocos creator 服务器时间获取
时间:2019-02-17
本文章向大家介绍cocos creator 服务器时间获取,主要包括cocos creator 服务器时间获取使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言:
在creator 开发中,我们经常要去获取时间, 如果仅仅只是用时间戳做一些客户端标记,用JavaScript 中的Date对象,完全可以满足需要,但是,如果牵扯到时间的显示,或者判断某些与时间有关的变量的时候, 仅仅使用Date 对象是不够的. 因为客户端本地的时间是可以调节的,用户调节了本地时间后,Date对象就会和服务器的时间不同步,会产生错误,那么这时候,我们就要获取服务器时间
方案:
1. 发送协议,获取服务器时间
2. 利用连线后的心跳协议(用来确认用户在线),来更新服务器的时间
3. 登录时获取服务器时间,客户端做定时器,自己维护这个时间
4. 登录时获取服务器时间,客户端记录当前游戏运行的时间. 服务器时间 = 初次获取的时间 + 游戏运行的时间差
很明显,方案4 是最好的.
游戏中有很多获取时间然后计算的地方,每次都从服务器获取,游戏的逻辑就没法完成了,所以方案1 不可行.
如果用方案二, 那么心跳的频率设置多少呢,频率高了,影响其他协议,低了时间又不同步,而且再两次心跳之间,需要使用时间时,会发现时间是一样的.方案2 不可行.
方案3,看似很不错,实际上也有瑕疵,如果游戏暂停,计时器就会停止运作,这时就会存在时间差
实现方法:
要获取运行时间就要用到 Performance 对象了, 我们不妨写成一个函数:
function getTickCount() {
if(window && window.performance){
return window.performance.now();
}
return (new Date()).getTime();
}
代码实例:
//一个服务器时间简单实现
function getTickCount() {
if(window && window.performance){
return window.performance.now();
}
return (new Date()).getTime();
}
export class ServerTime {
private _t: number;
private _lastSetTime: number;
private _timer: number;
constructor(t) {
let self = this;
self._t = t || (new Date()).getTime(); // 时间戳
self._lastSetTime = getTickCount(); // 最后一次setTime时, 本地时间点
//实现一个计时器,每隔一段时间和服务器同步一下时间
//self._timer = ...
}
public setTime(t): void {
// 链接服务器后,调用这个方法同步服务器时间
let self = this;
self._t = t; //
self._lastSetTime = getTickCount();
}
//--获取当前的服务器时间戳
public getTime(): number {
let self = this;
let elapsed = getTickCount - self._lastSetTime;
return self._t + elapsed;
}
}
上面的代码,连接服务器后,收到服务器时间后调用setTime
可以不要定时器.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL information_schema详解 CHARACTER_SETS 表
- 彻底弄懂 Unicode 编码
- 两种使用代码获得SAP CRM product sales status的办法
- C#: "$"作用和用法
- SAP ABAP字符和字符串变量隐式转换的一些规则
- MySQL information_schema详解 COLLATION_CHARACTER_SET_APPLICABILITY
- 如何处理Angular项目在Visual Studio Code打开报关于@Decorators的警告信息
- QT 中普通数值与字符串之间的转换
- C# 时间与时间戳互转 13位
- 在C#中ref和out具体怎么使用?在什么情况下使用?
- Vs code 创建vue模版
- [892]python中re.split()方法
- MacOS抓包工具Charles
- PYTHON替代MATLAB在线性代数学习中的应用(使用Python辅助MIT 18.06 Linear Algebra学习)
- C# TCP/IP 文件(图片、视频等)收发系统