Category Archives: 编程技术

影子跟随算法(2007年老文一篇)

算法简述   动作类游戏如何在高延迟下实现同步?不同的客户端网络情况,如何实现延迟补偿?十年前开始关注该问题,转眼十年已过,看到大家还在问这类问题,旧文一篇,略作补充(关于游戏同步相关问题还可以见我写于2005年的另外两篇文章,帧锁定算法 和 网游同步法则): 影子跟随算法由普通DR(dead reckoning)算法发展而来,我将其称为“影子跟随”意再表示算法同步策略的主要思想: 1. 屏幕上现实的实体(entity)只是不停的追逐它的“影子”(shadow)。 2. 服务器向各客户端发送各个影子的状态改变(坐标,方向,速度,时间)。 3. 各个客户端收到以后按照当前重新插值修正影子状态。 4. 影子状态是跳变的,但实体追赶影子是连续的,故整个过程是平滑的。 图1 算法演示 前面的1号终端控制红色飞船P1向左飞,并把自己的状态时时告诉服务器 后面的2号终端上接收到飞船P1的影子S1的状态(向左移动),并让P1的实体追赶S1 网络性能指标一:带宽,限制了实时游戏的人数容量 网络性能指标二:延时,决定了实时游戏的最低反应时间   使用该算法可以容易的开发出一款马里奥赛车,或者Counter Strike,详细说明见后:

Loading

Posted in 游戏开发, 编程技术, 网络编程 | Tagged , | 14 Comments

超越 STL-map/hash_map性能的DICT

最近用纯C作了一个dict,根据试验,比 stl的 map快 2.3-2.5倍,比 hash_map快 1.3倍,主要用到的优化策略如下:

Loading

Posted in 编程技术 | Tagged | 1 Comment

ASCII Art Algorithm

因为希望将图片转换成字符以后可以方便的帖到论坛或者BBS上,所以画时间写了这个算法。现有很多算法都是将一个点匹配成一个字符,这样转换工作只是简单的将点亮度查表后换成ASCII字符而已,但是其实这样做的效果并不十分好,首先80×25的字符屏幕就只能表示80×25个点,无法充分发挥单个字符的字形特点,而且图片很多精度和细节都丢失了。比如下面这个连接:

Loading

Posted in 图形编程, 编程技术 | Tagged , | Leave a comment

帧锁定同步算法

帧锁定算法解决游戏同步 早期 RTS,XBOX360 LIVE 游戏常用同步策略是什么?格斗游戏多人联机如何保证流畅性和一致性?如何才能像单机游戏一样编写网游?敬请观看《帧锁定同步算法》 《帧锁定同步算法》转载请注明出处:https://skywind.me/blog/archives/131 算法概念 该算法普遍要求网速 RTT 要在 100ms 以内,一般人数不超过 8 人,在这样的情况下,可以像单机游戏一样编写网络游戏。所有客户端任意时刻逻辑都是统一的,缺点是一个人卡机,所有人等待。 1.客户端定时(比如每五帧)上传控制信息。 2.服务器收到所有控制信息后广播给所有客户。 3.客户端用服务器发来的更新消息中的控制信息进行游戏。 4.如果客户端进行到下一个关键帧(5帧后)时没有收到服务器的更新消息则等待。 5.如果客户端进行到下一个关键帧时已经接收到了服务器的更新消息,则将上面的数据用于游戏,并采集当前鼠标键盘输入发送给服务器,同时继续进行下去。 6.服务端采集到所有数据后再次发送下一个关键帧更新消息。 这个等待关键帧更新数据的过程称为“帧锁定” 应用案例:大部分 RTS 游戏,街霸II(xbox360),Callus 模拟器。 算法流程 客户端逻辑: 判断当前帧 F 是否关键帧 K1:如果不是跳转(7)。 如果是关键帧,则察看有没有 K1 的 UPDATE 数据,如果没有的话重复第 2 步等待。 采集当前 K1 … Continue reading

Loading

Posted in 游戏开发, 编程技术, 网络编程 | Tagged , | 35 Comments

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脚本

Loading

Posted in 编程技术 | Tagged | Leave a comment

Python少打字小技巧

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

Loading

Posted in 编程技术 | Tagged | 1 Comment

关于“面向显示器编程”

原创  关于“面向显示器编程” 收藏 最近吃饭的时候听公司两位同事聊起“面向显示器编程”(screen oriented programming)。sop这个东西我虽偶有所闻,却未有什么了解。这两位同事跟我说AOP其实是退化了的SOP,这个说法让我觉得SOP会有点意思。 个人觉得,OOP完成了对数据的重用,AOP完成了对算发的重用,而SOP则完成了对显示器的重用。 基于对SOP的应用,我们只需要在电脑前多加一把凳子,就可以通过工作空间上的复用,和项目时间上的压缩,达到了为公司节省资源,提高工作效率的目的。。。。 Life is :-( Life is :-) /\/\ ~~ (-.-;) 呵呵,哈哈

Loading

Posted in 编程技术, 随笔 | Tagged | Leave a comment

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

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

Loading

Posted in 大浪淘沙, 游戏开发, 编程技术, 随笔 | Tagged | 1 Comment