Random Posts
Tags
Categories
Recent Comments
- yilufeiyang on 游戏服务端架构发展史(下)
- 小肥 on GDB 从裸奔到穿戴整齐
- flandre on 异步事件模型的 Self-pipe trick
- inv on 异步事件模型的 Self-pipe trick
- skywind on 异步事件模型的 Self-pipe trick
Links
Meta
Category Archives: 游戏开发
[讲稿] CGDC2009 演讲:游戏峡谷地图自动生成
2009年在上海 CGDC的演讲稿《游戏地图自动生成》,该算法主要用来生成山地峡谷地图。
Tiled Map Editor 使用说明
1. 首先下载 Tiled Map Editor: 地图编辑器:http://www.skywind.me/mw/images/8/81/TiledMapEditor.7z 资源图片集:http://www.skywind.me/mw/images/0/09/Server_in_12h_images.7z 解压,然后下载资源图片解压,保存在examples目录下面 (点击Read more 阅读全文) 我们最终将编辑下图的地图,并用Python读出来:
[讲义] 游戏客户端十二小时入门
这是我2005-2007年在公司培训时候的讲义,当时现场效果相当热烈: 可以到下面地址下载:
[自制开源] 轻量级图形库 PixelLib
图像:64种不同的像素格式,色彩空间变换,多种图形图像变换。 质量:支持3种级别抗锯齿效果,高质量几何图形绘制。 实现:轻量级纯软件实现,100% C代码(仅700KB代码)。 优化:SSE2/MMX优化 地址:https://github.com/skywind3000/pixellib 1. 图像变换: 支持仿射变换和透视变换,提供大量图像变换操作接口。
[游戏演示] ActionScript 鼠标手势识别
学习ActionScript3,画一星期写了个DEMO: 网页地址:http://www.skywind.me/weapon
影子跟随算法(2007年老文一篇)
算法简述 动作类游戏如何在高延迟下实现同步?不同的客户端网络情况,如何实现延迟补偿?十年前开始关注该问题,转眼十年已过,看到大家还在问这类问题,旧文一篇,略作补充(关于游戏同步相关问题还可以见我写于2005年的另外两篇文章,帧锁定算法 和 网游同步法则): 影子跟随算法由普通DR(dead reckoning)算法发展而来,我将其称为“影子跟随”意再表示算法同步策略的主要思想: 1. 屏幕上现实的实体(entity)只是不停的追逐它的“影子”(shadow)。 2. 服务器向各客户端发送各个影子的状态改变(坐标,方向,速度,时间)。 3. 各个客户端收到以后按照当前重新插值修正影子状态。 4. 影子状态是跳变的,但实体追赶影子是连续的,故整个过程是平滑的。 图1 算法演示 前面的1号终端控制红色飞船P1向左飞,并把自己的状态时时告诉服务器 后面的2号终端上接收到飞船P1的影子S1的状态(向左移动),并让P1的实体追赶S1 网络性能指标一:带宽,限制了实时游戏的人数容量 网络性能指标二:延时,决定了实时游戏的最低反应时间 使用该算法可以容易的开发出一款马里奥赛车,或者Counter Strike,详细说明见后:
帧锁定同步算法
帧锁定算法解决游戏同步 早期 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