2015-04-19 19:07 1466人阅读 评论(0) 收藏 举报
 分类:
Lua(29)   cocos2d(38) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间显示问题说白了就是时差问题(下面代码片断是以lua脚本写的)。
一般来说,游戏中时间是以游戏服务器时间为准。游戏登录时,会从服务器接收一个时间,普遍方案是接收一个时间戳,然后客户端自己维护这个时间戳。有时,客户端会进行这个时间的显示:
local ServerTimeStamp = XXXXXXXX  --这个是服务端发给客户端维护的时间戳
local ServerTimeZone = XXXX      --这个是服务端时间的时区差值(也是由服务端发给客户端)
local CurrentDateTime = os.date("*t",ServerTimeStamp)
print("year="..CurrentDateTime.year)
print("month="..CurrentDateTime.month)
print("day="..CurrentDateTime.day)
print("hour="..CurrentDateTime.hour)
print("min="..CurrentDateTime.min)

print("sec="..CurrentDateTime.sec)

如果你的游戏服务端时间的时区是东八区,且跑上面代码的机子的时区也是东八区,你可能会非常乐意地看到,打印出来的时间与服务端时间是一致的;但是用来跑上面代码的机子的时区不是东八区,如一个日本人使用他机子来跑你的程序(他的机子时区是东九区),这时会看到打印出来的时间比这游戏服务端的时间快了1个小时,这肯定是错误的。

为什么会这样?
原来上面调用os.date()时会把当前设备的时区也关联上去。所以在东八区设备下跑完全是正确的。但你不可能指定别人使用固定时区的机子来跑你的程序吧,那怎办呢?
-- Compute the difference in seconds between local time and UTC.
local function get_timezone()
  local now = os.time()
  return os.difftime(now, os.time(os.date("!*t", now)))
end
local localTimeZone = get_timezone()
local timeZoneD = ServerTimeZone - localTimeZone  --计算出服务端时区与客户端时区差值
local CurrentDateTime = os.date("*t",ServerTimeStamp + timeZoneD)
这时你会发现,无论你使用东八区、东九区或者其它时区的机子去跑,它都正确地打印出这个服务器的时间。
扩展一下来说,只要你做了这个时区的差值处理,无论服务器的时区是哪个,无论客户端的时区是哪个,客户端都能正确地显示服务器的时间。
再扩展一下来说,无论是哪个cocos2dx的版本,无论是使用哪个游戏引擎框架,都应该在处理时间上做类似上面的时区处理,让客户端能够正确地显示服务端的时间。

Lua游戏时区问题的更多相关文章

  1. Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解

    这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...

  2. lua游戏开发实践指南学习笔记1

    本文是依据lua游戏开发实践指南做的一些学习笔记,仅用于继续自己学习的一些知识. Lua基础 1.  语言定义: 在lua语言中,标识符有非常大的灵活性(变量和函数名),只是用户不呢个以数字作为起始符 ...

  3. Lua游戏逆向及破解方法介绍

    Lua游戏逆向及破解方法介绍   背景介绍 随着手游的发展,越来越多的Cocos-lua端游开发者转移到手游平台.Lua脚本编写逻辑的手游也是越来越多,如梦幻西游.刀塔传奇.开心消消乐.游龙英雄.奇迹 ...

  4. [Lua游戏AI开发指南] 笔记零 - 框架搭建

    一.图书详情 <Lua游戏AI开发指南>,原作名: Learning Game AI Programming with Lua. 豆瓣:https://book.douban.com/su ...

  5. Lua游戏开发之时区问题

    目前大部分游戏都采用了Lua语言进行功能开发,在进行多语种发行的时候就会遇到时区显示的问题.以韩国版本为例,场景如下: 1.服务器处于固定的位置,比如放在首尔机房: 2.玩家所处的位置不确定,可能在韩 ...

  6. cocos IDE 编译lua 游戏程序的环境配置

    因为毕业设计需要用cocosIDE编译一个apk在手机上跑,所以搭建这个环境还是需要的. ps:是针对win系统的. 需要的工具: 1.cocosIDE:点击链接 (ps:据说这个软件设计有点反人类, ...

  7. 读Lua游戏开发实践指南

    11月11日开读,到今天正好一个月. 起因是被裁员之后,发现很多公司都在使用lua编写cocos2d-x游戏,原因是上手快,技术人员比较便宜. 如果引擎封装比较好,几乎在lua里写写基本逻辑就行了,不 ...

  8. 第一个Cocos2d-x Lua游戏

    我们的编写的第一个Cocos2d-x Lua程序,命名为HelloLua,从该工程开始学习其它的内容.创建工程我们创建Cocos2d-x Lua工程可以通过Cocos2d-x提供的命令工具cocos实 ...

  9. 《Lua游戏开发实践指南》读后感

    书籍地址:http://book.douban.com/subject/20392269/ 一句话点评该书:想用Lua作游戏脚本开发的同学值得一读! (一)本书特点 市面专门讲Lua的中文书籍非常少, ...

随机推荐

  1. 使用javax.servlet.http.Part类上传文件

    使用的是Servlet 3.0 新的特征标注(Annotaion)类描述部署,一些低版本的服务器需要使用标准依赖部署描述文件(web.xml)来部署,另外Part也是Java EE 6.0新增的类,P ...

  2. HTML5 的一些小的整理吧

    主要的就是一些HTML 5 API 的使用 也是借鉴别人的博客 ,和MDN(中文部分的还是能看的懂) 上面的一些东西 具体的代码在 有道云笔记里面也有. 先把总得列出来 1.Canvas绘图 学完这个 ...

  3. iOS推送小结(证书的生成、客户端的开发、服务端的开发)

    1.推送过程简介 1.1.App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请 ...

  4. MysqlNDB集群配置

    为了避免不必要的资源分配,默认情况下是不启动ndbcluster引擎.

  5. JAVA的模式对话框和非模式对话框

    周末的时候,一位网友让我帮他把他的无模式对话框改成有模式对话框. 界面是由swing制作的,都是JFrame,我从来没有接触过swing编程.大致的代码还是看的懂,很多都和C#很相似. 然后就去查资料 ...

  6. git 学习

    一.bash中查看已经提交的文件:git ls-files 二.返回上级目录:cd ..     (中间含空格) 三.在当前目录下新建文件夹: mkdir dirName 新建文件:touch new ...

  7. WiX Toolset 教程索引页

    注意:虽然WiX Toolset功能强大,但其学习曲线相对较高.请慎重选择: 若没有足够时间.没心思搞的请绕行至inno setup.installshield.nisi.setupfactory.. ...

  8. cmake cannot find package

    cmake 找不到package,如 find_package (OpenMesh REQUIRED) 出现错误 在项目的文件夹中找到 FindOpenMesh.cmake 文件,将其所在路径添加到 ...

  9. JMeter中HTTP Cookie 管理器使用

    案例: 在一次做公司OA系统的时候,发现录制脚本无法回放成功,通过定位,是因为登录的过程中存在重定向,导致登录接口的状态没有自动带入重定向页面 解决方法: 加入HTTP Cookie 管理器使用 现象 ...

  10. wpf 切换资源字典的2中方式

    var _1200RDUri = new Uri(String.Format(@"/aa;Component/Themes/1200Theme.xaml"), UriKind.Re ...