April 30, 2016

有创意必须实现出来才有意义

这两天在一个游戏设计论坛潜水,读了很多帖子,感觉挺有收获的。

尤其是有一贴,楼主贴了一长篇他的 idea ,应当是想了很久的,算是比较完整,只差动手了。按他的说法,想先在论坛上收集一些反馈。这个论坛聚集了许多核心玩家,和相当数量的游戏开发者,按道理说,他找对地方了。

可是,在下面的回帖中,某人对此作了严厉的批评。

阅读全文 "有创意必须实现出来才有意义" »

April 16, 2016

暴击英雄上架了

不知道这个 blog 的读者中还有多少记得我们承诺要出的单机游戏《暴击英雄》。他终于上架了。

点上图可以去 steam 商店看看,目前首发 7.9 折,30 人民币,如果你读完商店页面下面的好评和差评后,觉得你或许会喜欢这个游戏,那么欢迎你支持我们一下。

ps. 如果你希望用支付宝,可以去衫果买。只不过在衫果买的话,不喜欢不能退款。


按原来的计划,这款游戏应该是在 2015 年底完成的,作为试水产品在 steam 上发售。结果,不出意料的跳票了。开发期整整延长了半年,原因自然是对游戏一直不满意。至于现在的版本,依旧不满意,所以目前还是 Early Access 阶段,接下来两个月会想办法修改已知的问题,希望可以做得好一点点。

至于为什么没有在完全满意后再发布,是因为如果一直这么做下去而不获得真正玩家的反馈,就改成无底洞了。很多内部意见争议也很大,不被玩家骂几句,大家是没那么大动力改的。

阅读全文 "暴击英雄上架了" »

April 14, 2016

排行榜奖金的发放方法

最近有数据显示,我们的游戏《流星庄园》有玩家利用规则漏洞,通过排行榜奖励刷钻石。

我问了一下设计人员一些细节,感觉现在的规则设计是很有问题的。下面记录一下我的想法,和一些改进建议。

排行榜奖励问题不只在我们这样特定的游戏中有,现在几乎所有的 pay2win 游戏都会涉及到。我们最初的规则是,每周为排名前列的公会按名次发放一定的钻石奖励,鼓励大公会竞争,促进消费。

后来,有玩家反应,如果公会无法排在前列,就没有动力竞争了。所以又加了补充规则,如果公会排名又提升,也有相应的奖励。

阅读全文 "排行榜奖金的发放方法" »

April 12, 2016

lua 常量表优化

今天花了一天尝试给 lua vm 做了一点优化:

现在 lua 的函数原型里保留有一张常量表,引用了 string ,number ,nil ,boolean 类型的常量。

table 是不能为常量的,所以当你想迭代一个常量数组的时候,

for _, v in ipairs { "one", "two", "three" } do

其实每次都会临时构建一张表,并依次插入 "one", "two", "three" 。

或者你想返回一个常量构成的表:

function foo()
  return { x=1, y=2 }
end

每次 foo 函数都会为返回值重新构建 table 。

阅读全文 "lua 常量表优化" »

April 11, 2016

我需要一个怎样的中文输入法

不堪被 windows 升级弹窗骚扰,终于升到了 windows 10 。最不能忍受的是新的中文输入法,之前用的智能 ABC 已经完全不能用了。btw, 我爹他老人家就是因为没有 ABC 完全输入不了汉字,又重装了系统,退回 windows 7 去了。我没那么能折腾,所以还是想别的招。

很多年前我就写过,为什么我需要 智能 ABC ,到今天观点还是没有变。我听说 QQ 拼音加入了 ABC 模式,其实就是加了 5 个笔画,它并没有理解 ABC 为什么那样设计,所以做的并不好。

并不是说 ABC 设计的多完美,如果我来设计我期望的中文输入法,肯定有很多想法和 ABC 的设计不同。但是其核心是一样的:那就是,赋予每个汉字更多的编码形式,结合词(不是句子)尽可能的减少重码。

阅读全文 "我需要一个怎样的中文输入法" »

March 23, 2016

重载一个 skynet 中的 lua 服务

今天有同事问到,能不能不关闭 skynet 进程,直接重新加载一个 lua 服务。

简单的回答的不能。如果要详细回答,并非完全不行,但这个需求需要使用 skynet 的人自己定制出来。

其实,这涉及服务的热更新问题。由于 lua 的函数是 first class 对象,所以,它即好做热更新,又无法做成业务完全无关的。

容易做的一方面在于,lua 函数本身就是一个对象,只要你找到 lua vm 里的需要更新的函数对象被哪些地方应用,就可以生成(通过 load 新的脚本代码)新对象,取代值前的引用即可。

不容易做的一方面是,lua 完全不区分什么是代码,什么是数据,所以没有 C 语言中所谓符号表。所以并没有统一的地方可以查找 lua vm 里已有的函数。甚至函数也没有名字,你不能用名字索引出新版本的函数,替换掉老版本的。除非你的业务框架做了适当的约定。

另外,在 lua 中,所有函数都是闭包。如果你只想替换闭包中函数原型的实现,那么还需要做 upvalue 的重新关联。这是一个繁杂的过程,如果没有适当的约定,也无法彻底做对。btw, snax 里就做了一些约定,可以一定程度的做到热更新。

阅读全文 "重载一个 skynet 中的 lua 服务" »

March 21, 2016

在 skynet 中处理 TCP 的分包

skynet 的核心并没有规定怎样处理 TCP 的数据流,但在开发网络游戏时,我们往往需要按传统,把 TCP 连接上的数据流分割为一个个数据包。

将数据流转换为数据包,比较常见的做法是给数据包加一个长度信息,组装在数据流中。我个人比较推荐使用两个字节表示包长度。在 skynet 中提供了一个 GateServer 的模板来帮助用户实现这样一个网关。

这个网关模板采用推送的模式,一旦用户初始化完毕,就会自动分割连接上的数据流,按协议(两字节长度加内容)分割为数据包,回调处理函数。在回调函数中,你可以为新连接启动一个独立服务来处理这个连接上的请求,也可以在单一服务中处理。这些不在本文中讨论。

阅读全文 "在 skynet 中处理 TCP 的分包" »

Misc

Categories

Archives

Recent Comments