分类 编程技术 中的文章

帧锁定同步算法

帧锁定算法解决游戏同步

早期 RTS,XBOX360 LIVE游戏常用同步策略是什么?格斗游戏多人联机如何保证流畅性和一致性?如何才能像单机游戏一样编写网游?敬请观看《帧锁定同步算法》 《帧锁定同步算法》转载请注明出处:

http://www.skywind.me/blog/archives/131

算法概念

该算法普遍要求网速RTT要在100ms以内,一般人数不超过8人,在这样的情况下,可以像单机游戏一样编写网络游戏。所有客户端任意时刻逻辑都是统一的,缺点是一个人卡机,所有人等待。

  1. 客户端定时(比如每五帧)上传控制信息。
  2. 服务器收到所有控制信息后广播给所有客户。
  3. 客户端用服务器发来的更新消息中的控制信息进行游戏。
  4. 如果客户端进行到下一个关键帧(5帧后)时没有收到服务器的更新消息则等待。
  5. 如果客户端进行到下一个关键帧时已经接收到了服务器的更新消息,则将上面的数据用于游戏,并采集当前鼠标键盘输入发送给服务器,同时继续进行下去。
  6. 服务端采集到所有数据后再次发送下一个关键帧更新消息。

这个等待关键帧更新数据的过程称为“帧锁定” 应用案例:大部分RTS游戏,街霸II(xbox360),Callus模拟器。

……

阅读全文

PY2EXE的启动步奏参考-科学的发布

周末读了一下Py2Exe的代码,偶然发现Py2Exe的实现,是一套很成熟的客户端发布方式,不限于只有 Python项目可以参考,Py2exe启动步奏如下: Py2exe启动步奏方式参考:

  1. 主程序启动,尝试在本EXE的资源中找到zip过后的PythonXX.dll的数据
  2. 如果找到 PythonXX.dll数据则unzip后以memory dll方式加载并导出接口
  3. 初始化 memoryimporter,给python提供在内存中import一个pyc或者dll的功能
  4. 利用memoryimporter加载 ctypes.pyd模块
  5. 利用py2exe_util.c中的方法,加载程序所需要的资源:ICON等
  6. 在资源中初始化 zlib.pyd等必要模块
  7. 在资源中找到初始化,以 __main__ 的命名开始转入Python脚本
……

阅读全文

Python少打字小技巧

说明:增加代码的描述力,可以成倍减少你的LOC,做到简单,并且真切有力 观点:少打字=多思考+少出错,10代码行比50行更能让人明白,以下技巧有助于提高5倍工作效率

1. 交换变量值时避免使用临时变量:(cookbook1.1)

老代码:我们经常很熟练于下面的代码

temp = x
x = y
y = temp

代码一:

u, v, w = w, v, u

有人提出可以利用赋值顺序来简化上面的三行代码成一行

代码二:

u, v = v, u

其实利用Python元组赋值的概念,可更简明 — 元组初始化 + 元组赋值

2. 读字典时避免判断键值是否存在:(cookbook1.2)

d = { 'key': 'value' }

老代码:

if 'key' in d: print d['key']
else: print 'not find'

新代码:

print d.get('key', 'not find')
……

阅读全文

关于“面向显示器编程”

最近吃饭的时候听公司两位同事聊起“面向显示器编程”(screen oriented programming)。sop这个东西我虽偶有所闻,却未有什么了解。这两位同事跟我说AOP其实是退化了的SOP,这个说法让我觉得SOP会有点意思。 个人觉得,OOP完成了对数据的重用,AOP完成了对算发的重用,而SOP则完成了对显示器的重用。

基于对SOP的应用,我们只需要在电脑前多加一把凳子,就可以通过工作空间上的复用,和项目时间上的压缩,达到了为公司节省资源,提高工作效率的目的。。。。

Life is :-(

Life is :-)

呵呵,哈哈

……

阅读全文

未来三五年游戏研发问题预测

下面根据以往经验对未来三五年游戏开发问题做一个预测,所论述问题,缺乏严格证明。大家全当看故事,茶余饭后消遣娱乐一下:

1. 研发瓶颈从技巧演变成为规模,解决复杂度问题将成为国内一流开发者的主要矛盾,而未能进军一流水平的二流开发者将会进一步沦落成软件工厂和外包工作室。

2. 对于开发游戏,多人视频,新的输入设备,可看不可玩,三年内国内由于该方向知识薄弱,即便国外有大的成就,国内一时也难以效仿。

3. 日下国内过于注重技巧的世风,在面对突入其来的规模问题,以及国外先进开发工具的双重夹击,会导致诸多游戏项目连续不断的失败,国内将再一次引发游戏开发方法的大讨论,各种为游戏行业量身订制的软件工程及开发理念纷纷出现,目不暇接。

4. 微软两年内会推出崭新开发平台,为改良DirectX和传统VisualIDE逐渐力不从心的被动,新平台将结合Vista系统优势,也是对1990年MS平台开发战略的再 一次体现,当时英国记者评论“只有不断降低开发门槛,使未来全世界的开发者都习惯傻瓜编程了,才能有力的压制一切可能形成威胁的力量”这次统一Win/XBOX的编程接口自然不在话下,结合长期捆绑和专利等方面的蚕食,对OpenSource和其他轻量级开发工具实施致命打击。

5. 数月前微软宣布放弃几年前启动的GAPI的发布转而变出DX10,紧接着又宣布 VS.Net2005 Express的永久免费,现在已暴露出自己越来越大的野心了。三年后,高校合作工程开花结果,等第二,三批微软专家们成为国内研发主力的同时,结合Vista的下一代游戏开发工具的主流化,国内使用DX11/12的从业者必将遭遇类似DOS >Win的门槛面临失业和转变的选择,MS教徒们在2008年末必定会乘虚而入,钻入行业主力研发队伍。

6. Shockwave等等其他游戏开发工具由于迫于主流平台压力,会进一步在WEB方面发挥自己的优势,WEB平台游戏开发将会再次引起人们重视。

7. 第一二批开发者离开一线开发阵营,开始反思,一批优秀文化作品将会面世,各种关于游戏开发的故事,程序员文化引发二次回归,成为游戏文化的一个主流。

……

阅读全文

网络游戏南北互通问题分析

网络游戏南北互通问题方案

网络游戏用户按接入分,有多数的电信用户,次多数的网通用户,又有处于教育网的学生用户,造成了互联互通上极大的障碍。又由于当今游戏用户数据的越来越强的集中性和游戏服务器的分散性之间无可避免的矛盾,无法将游戏平台划分成为一个个独立的世界。

在上次的文档“QQ游戏服务器分布说明”后又补充了一篇“QQ游戏服务器响应速度”,可以发现QQ游戏服务器除去黑龙江,吉林,辽宁三省的大量网通用户外,在各地相对于电信和网通的访问速度都还是比较迅速的。下面是一些分析:

如果我们设计要求最高的实时性游戏的话,本着200ms的基准是完全合理的。

不同情况和不同游戏对网速的需求

网络情况\属性 响应时间 棋牌类游戏 竞技类游戏 实时性游戏
< 250ms 满足 满足 满足
250ms-450ms 满足 基本满足 N/A
450ms-1000ms 基本满足 难满足 N/A
恶劣 > 1000ms 难满足 N/A N/A
……

阅读全文

网络游戏同步法则

网路的硬件也有限,而人的创造也无限,在公网平均130ms的Latency下,是不存在“完全的”的同步情况。如何通过消除/隐藏延时,将用户带入快速的交互式实时游戏中,体验完美的互动娱乐呢?

以下六点,将助你分清楚哪些我们可以努力,哪些我们不值得努力,弄明白实时游戏中同步问题关键之所在,巧妙的化解与规避游戏,最终在适合普遍用户网络环境中(200ms),实现实时快速互动游戏:

1. 基本情况:

(A) 网络性能指标一:带宽,限制了实时游戏的人数容量
(B) 网络性能指标二:延时,决定了实时游戏的最低反应时间

2. 两个基本原则:

(A) 让所有的用户屏幕上面表现出完全不同的表象是完全没有问题的。
(B) 把这些完全不同表象完全柔和在一个统一的逻辑中也是完全没有问题的。

3. 同步的十二条应对策略:

(A) 最大可能减少游戏中的数据传输
(B) 将阻塞通信放到线程池中实现
(C) 永远不要为了等待某个数据而不让游戏进行下去
(D) 利用预测和插值改进游戏的效果
(E) 当使用预测插值的时候传送的数据不仅包括坐标,还需要速度和加速度
(F) 将输入数据枷锁或者队列化(例如键盘消息队列),直到下次发送数据的时刻,传统的方法是在固定的时间(发送数据前)检测键盘,在游戏的原理上隐藏延时
(G) 使用事件调度表,将需要在所有用户客户端同时发生的事件,提前广播到所有用户
(H) 使用多次攻击来杀死一个精灵,尽量减少一次性的、确定性的、延时敏感的事件
(I) 延长子弹或者火箭在空中飞行的时间(在其飞行的同时,在所有客户端进行预测插值)
(J) 所有物体从一个地方移动到另外一个地方都需要时间,避免诸如“瞬间移动”的设计
(K) 尽量使游戏中所有精灵,飞船或者其他物体,都按照可预测的轨迹运行,比如在移动中增加惯性
(L) 充分发挥创造力,尽最大可能的合并游戏中前后相关的事件,合并游戏中存在的延时此问题,需要在技术上改进的同时也需要策划有所重视,规避一些影响较大的设计,巧妙的隐藏”延时”

4. 同步问题现状:

(A) 重视程度不够:很多人尚未意识到此问题的存在,曾有公司花半年时间打算做一款“松鼠大战”的网络版。
(B) 技术上无彻底解决方案:对于多数程序员,单机游戏技术善未成熟就匆匆步入网络时代。
(C) 研究这个技术需要条件:需要有实力的公司才能提供,无此条件,即便有能力的程序员也无法成功。

5. 目前网游的三大技术难题:

(A) 服务器的响应问题:如何使服务器在支持越来越多的人数的情况下提供最高的响应。
(B) 同步问题:如何在有限的网络响应情况下,实现快速实时类游戏,提供最完美的交互。
(C) 服务器分布式问题:如何在统一用户数据的情况下,利用分部式将各个分散的“世界”统一到一个“世界”中。

谁能真正解决好以上三个问题,配合策划在设计上的突破,将使其他人在至少两年内无法超越。

6. 相关补充:

(A) 网格技术现在还是抄作,真正用到游戏中,还有很多技术难点需要突破(比如:目前网格的单位计算时间是以秒计算).
(B) 其实与很多人想法相反的是现在3D技术早已不是主要的矛盾。而现在国内外对于以上三个问题可以说处于同一个起跑线上,完全有机会取得先机。
(C) 现在解决同步问题已经很紧迫,而同时所需要的环境也已经成熟,只要有所关注,半年之内可以得出较成熟的结论

那么具体怎么解决呢?再下一步怎么办?
这就得自己去实践了,我只说这么多了,哈哈,不然又教懒了那些成天再网上搜方案的人。

转载请著名出处:http://www.skywind.me/

……

阅读全文

在现MSN魔法表情

下面是播放时候的效果图:

MSN的魔法表情实在是COOL,兴趣之下自己也做了一个特效演示 将FLASH拖到窗口上面,然后点“特效”, 如果桌面是32位的效果非常漂亮,可以拖动图形,现在就下载:

演示程序 演示程序地址二 (98KB)

最好笑的事情是那天发现有些聊天软件的魔法表情居然是假的,它是把桌面抓下来然后用IE空间来播放flash, 顺便把抓下来的桌面当背景.或者直接用ColorKey -_-

……

阅读全文