[返回] [最新] [最热门] [最高评价]

动作游戏中的击打判定

最近在玩怪物猎人世界,断断续续差不多 100 小时了,加上之前花在这个系列上的几百小时,不敢说是个老猎人,忠实粉丝还是算得上的。

因为职业原因,我又琢磨了一下这类游戏的实现方法。在网上搜不到太多直接资料,所以这篇 blog 更多的是对自己的想法的记录。这次主要还是想理解一下游戏中是如何处理武器和怪物之间的击打判定的。

我知道动作游戏和格斗游戏侧重点不同,但也有类似之处。格斗游戏尤其是 2D 格
...

云风 2018-09-20 16:26 | 查看: 103

给 skynet 增加网络统计

skynet 在这个阶段的工作,主要是增强运行时内部信息的透明性。多提供运行时的统计数据可以为运维工作提供方便,也能为性能调优给出指导方向。

最近,我给 debug console 增加了 netstat 指令,以及提供了配套的 socket.netstat api 来获取这些数据。

这个指令可以获取 skynet 创建的所有 socket 的列表。每个 socket 归属于哪个 servic
...

云风 2018-09-12 17:36 | 查看: 289

lockstep 网络游戏同步方案

今天想写写这个话题是因为上周我们一个 MOBA 项目抱怨 skynet 的定时器精度只有 10ms (100Hz),无法满足他们项目 “帧同步” 的需求。他们表示他们的项目需要服务器精确的按 66ms 的周期向客户端推送数据,而 skynet 只能以 60ms 或 70ms 的周期触发事件,这影响了游戏的“手感” 。

讨论下来,我认为,这是对所谓“帧同步” 算法有什么误解。我们客户端运行时不应该
...

云风 2018-08-31 11:27 | 查看: 513

虚拟文件系统的自举

我们给游戏引擎设计了一个虚拟文件系统,可以挂接不同的文件系统实现,比如本地文件系统模块,内存文件系统模块,网络文件系统模块。比如前几天谈到的资源仓库,就是一个文件系统模块。

这个虚拟文件系统是用 lua 编写的,这就有了一个小问题:lua 代码本身也是放在虚拟文件系统中的,那么就需要解决自举。这些代码很有可能需要从网络更新(网络文件系统模块),而网络模块也是 lua 编写的,代码同样放在这套文件
...

云风 2018-08-16 11:43 | 查看: 544

Lua 虚拟机的封装

我打算就我们在开发客户端引擎框架时最近遇到的两个问题写两篇 Blog ,这里先谈第一个问题。

我们的框架技术选型是用 Lua 做开发。和很多 C++ 开发背景(现有大部分的游戏客户端引擎使用 C++ 开发)的人的认知不同,我们并不把 Lua 作为一个嵌入式脚本来看待,而是把它当成一种通用语言来设计整个引擎框架。

其实这更接近 HTML5 流行之后,用 javascript 设计游戏引擎框架:虽
...

云风 2018-08-15 16:06 | 查看: 523

游戏资源仓库及升级发布

去年底,我为我们的 3d engine 设计了资源仓库的结构。

随后交给开发组的一个同学实现,这半年来,一直在使用。最近做了引擎一个小版本的内部验收,我感觉这块东西还有比较大的改进余地。因为资源文件系统目前和开发期资源在线更新部分现在掺杂在一起,而网络更新部分似乎还有些 bug ,偶尔会卡住。我觉得定位 bug 成本较高,不如把这块重新实现一遍,顺便把新的改进想法加进去。

这段时间,我重新思考
...

云风 2018-08-15 11:20 | 查看: 528

三人合租的房租公平分配方案

今天在读《数学也荒唐》时读到分蛋糕问题,想起之前写过一篇 blog 谈房租分配,其实是同一个问题:

当多个人要切分资源时,如何让每个人都满意。

因为每个人对价值判断是不一样的,就租房来说,有人追求性价比;有人追求舒适,对价格不敏感;按某种固定的方案定价就不太公平。

如果是两人合租,最简单的公平方案就是你定价,我来选。A 来提一个自己认为公平的定价方案:例如大房间 1000 ,小房间 800
...

云风 2018-07-26 14:44 | 查看: 1093

数学运算的实时编译及 Lua 中的一点奇技淫巧

我为 3d engine 项目设计的向量运算库 已经用了一段时间了。在使用过程中也一直在改进 。从一开始,我就考虑过,这个库的设计主要考量是减少 lua 和 C 交互间的开销,提高内聚性。而易用性方面,计划再上面再做封装。这段时间继续在想怎样从更自然的表达形式转换到这个库的逆波兰指令流上。

大致的方向有两个:

其一,实现一个小语言,用字符串输入表达式组。

其二,利用 Lua 已有的语法解析设
...

云风 2018-07-12 11:24 | 查看: 360

线程安全的 log 回调函数

最近在做 3d engine 时发现,我们使用的渲染 api 库 bgfx 提供的 log 回调函数是需要自己保证线程安全的。也就是说 bgfx 有可能在不同线程(采用多线程渲染时)调用这个 log 回调函数。

如果回调函数仅仅只是把 log 串写入文件(例如标准输出),那么可以由 crt 本身来保证线程安全。但如果想自己处理 log ,例如把 log 串压回 lua 虚拟机,那么就必须自己负责
...

云风 2018-07-06 19:46 | 查看: 429

有时候还真要信命

我们公司最近预研了一款对战游戏,是我的创新实验室中一个同事原创的玩法,同时他做了几乎所有的实现工作:包括客户端,服务器,还有从别的老项目借出来的美术资源……

在独自开发了大半年后,我们又加了几个同事协助他把最后的工作完成。上个月,终于告一段落,所以在公司内部做了一次大规模的试玩。游戏还是挺有意思的,试玩的同学非常踊跃,昼夜不休的打天梯。试玩期结束后,我们决定对最活跃的数十个玩家进行一次奖励。用抽
...

云风 2018-06-27 17:11 | 查看: 806

群星的汉化及官方中文版

前段时间,Stellaris (群星)在 steam 上招到了大量差评。这款被短时间差评也不是第一次了,最猛烈的一次是因为 2.0 版改动太大,简直成了款新游戏,得罪了大量 100 小时游戏时间以上的老粉丝;我记得还有一次是因为涨价;似乎还有一次,原因不太记得了。

而这次,是因为有中国玩家用英文在官方论坛请求游戏加入官方中文,被客服不客气的回绝了。原本没官中就差评就是我朝玩家的时尚之一,而这次直
...

云风 2018-06-10 22:28 | 查看: 435

跟踪 skynet 服务间的消息请求及性能分析

skynet 中每个服务都是独立 lua 虚拟机,虽然服务间相互发起请求很容易,但业务复杂后,追踪业务逻辑却很麻烦。

我最近给 skynet 加了一个 skynet.trace() 命令,可以开启对当前执行序的跟踪统计。比如,在 example 的 agent 服务中,我们在每条 client 发起的请求处理时调用一次 skynet.trace() 就会得到下面这样的 log :

[:0100
...

云风 2018-05-29 15:50 | 查看: 472

...更多...