文章

关于游戏的“正规元素”

在阅读Tracy Fullerton的《游戏设计梦工厂》时,我对书中提到的“正规元素”这个概念始终感到困惑。为什么这些元素是正规的?难道还有不正规的元素吗?

英文原文中这个概念应该就叫做“Formal Element”,见《The formal systems of games and game design atoms》这篇文章,里面Formal Game Elements一节与《游戏设计梦工厂》第3章所写的“正规元素”是相同的。然而知道了英文原文也无助于理解为什么这些元素是formal的,是不是还有informal的元素。

一次偶然的机会,我得知身边的策划云海竟然在《游戏设计梦工厂》成书之前曾参与过早期校阅工作,还提过一些用词建议,在成书之后也向译者陈潮提过一些翻译问题。不禁喜出望外,立马抓住他问起了“正规元素”的问题。他说,对于这个词,翻译组也很纠结,他自己也和翻译组纠结过。可能翻译为“基础元素”或“核心元素”会更好。这只是作者为了后面的讨论,先规范地定义一下这些专业词。不过“正规”这个说法确实不好理解,给人一种这些元素很正经,其它元素不正经的感觉 😆 。

这么说来,其实所谓“正规元素”也就是一个游戏所要具备的重要元素,即玩家、目标、操作、规则、资源、冲突、边界和结果。借用一篇知乎专栏的话,这八个维度是“组成游戏的部分、零件”。可能并不是每个游戏都一定包含所有这八个元素,但只要是个游戏都至少含有其中某些元素。

顺便贴一下云海在讨论这个问题时画的一张图。很多小人在抗议:“为什么我们没有被列为正规元素?!”作者表示:“因为你们不正经!”

主机无法访问后学到了一些东西

上周五突然发现我无法访问自己的博客了,但是国内的朋友可以访问。心里一惊:不会被封了吧?!

可是我的博客一向老实本分啊。关键是,我买的是香港主机,IP是新加坡的,境外主机被封的话难道不应该是国内用户访问不了,国外用户可以访问吗?怎么现在反过来了?所以很可能是主机公园——也就是主机供应商方面的原因,大概线路故障什么的。更何况经过试验,即便从国内访问也无法登陆主机的cPanel管理界面,因此服务商方面故障的可能性很大。

我试着把自己的域名解析到别的网站IP,结果是我的域名可以正常指向别人的网站。因此看来域名没有问题,是IP已经不可用了。

联系主机公园几天都没收到回复,遂决定换主机服务商,搬家。

继续阅读主机无法访问后学到了一些东西

将git工作目录的改动应用到svn

之前在维护自己写的WordPress插件时,为了能够方便地同时向GitHub仓库和WordPress官方的svn仓库提交,我只在本地维护了一个git工作目录,然后用 git svn dcommit向svn仓库提交,用 git push向GitHub提交。(详见我之前写的日志。)

但可能是因为WordPress官方的svn仓库太大,历史记录太多,而git-svn的内部实现又有点问题,所以最近几次我用 git svn rebasegit svn dcommit都毫无反应。思来想去,为了不耽误时间,我还是决定老老实实用svn客户端了。

于是现在我本地就有了两个目录:一个git工作目录,用于向GitHub提交;一个svn工作目录,用于向svn提交。由于svn里的分支和标签实际上就是目录,因此svn工作目录下还有trunk、branches和tags子目录。trunk子目录里的内容才和git工作目录里的内容相同。

一般我是在git工作目录下写代码,因此思路是在git工作目录commit之后,用 git diff生成patch文件, git log输出提交日志到另外一个文件。然后用 patch命令将 git diff应用到svn工作目录。最后 svn commit的时候利用git log的输出,这样就可以做到svn trunk分支的提交和git master分支的提交一一对应。这个过程如下图所示:

继续阅读将git工作目录的改动应用到svn

《游戏设计梦工厂》练习1.3 把你的生活做成一个游戏

列出你生活中的五个可以作为游戏的领域,然后简要地形容每一个可能拥有的游戏结构。

我想这里说的游戏结构应该是指第2章和第3章所说的组成游戏的“正规元素”,即玩家、目标、规则和资源等等。

人生

这就是一个每个人都24小时在线玩的MMORPG,名字可以叫做《地球Online》——当然这里我不是指维基百科收录的那个真的叫做《地球Online》的国产游戏,而是指萌娘百科收录的那个70亿玩家同时在线的世界上规模最大的MMORPG。不过这个游戏的边界(就是将非游戏内容与游戏分开的东西,见书中第3章)太大,不如将范围缩小到我的人生,或者是我的日本生涯。这样这个游戏的时间边界就是我在日本生活的期间,地理边界就是日本,玩家就是我本人。

《模拟人生》移动版

这是一个自由度极高的开放式游戏,最接近的电子游戏应该是GTA和《模拟人生》。不过现实人生的游戏规则就是自然法则与社会规则,而GTA没有那么多社会规则。人生游戏本身没有目标,也不存在通关或输赢一说。玩家角色具有智力、体力、职业技能等属性或是技能天赋,从而决定了角色的行为能力。食物、水、空气等是游戏中的资源。随着时间流逝或是由于玩家的行为,一些事件或是剧情会被触发,玩家就需要和系统或是其他玩家交互。人生游戏内部还包含很多自成体系的大中小型游戏。这些游戏又具有自己的游戏结构,比如:

继续阅读《游戏设计梦工厂》练习1.3 把你的生活做成一个游戏

EMwI插件启用失败的问题

有几名External Media without Import的用户向我反馈说插件启用失败,提示语法错误。其中还有一名用户就此问题在github上向我提了一个issue。具体的错误提示是Parse error: syntax error, unexpected T_STRING in …….external-media-without-import.php on line 25。

然而external-media-without-import.php的第25行仅仅是一个名字空间定义:

经过调查与沟通,发现原因是用户使用的PHP版本低于5.3.0,而PHP到了5.3.0才引入名字空间的特性,见PHP 5.3.0 Release Announcement。起初用户以为自己的PHP版本是5.6.30,但依据经验我猜测对方机器上可能有多个PHP版本,并且WordPress使用了较老的PHP。后来用户在自己的WordPress上安装了Display PHP Vesion插件,果然发现WordPress用的是PHP 5.2.17。

因此各位用户如果遇到这个启用失败的问题的话,请用Display PHP Vesion插件查看一下WordPress所用的PHP版本,确保PHP是5.3.0或更高的版本。

想不到那么老的PHP版本都还是有很多国内外用户在用啊。

用UGUI Slider做血条时遇到的一个小问题

前段时间想在小游戏中做一个血条UI,自然而然地想到了用UGUI的Slider。

在Unity中可以通过编辑器菜单一键创建一个Slider。这样的一个Slider里会包含Background、Fill Area和Handle Slide Area三个部分。其中Handle Slide Area就是滑块。血条不需要滑块,因此要将它删掉。

刚用编辑器菜单创建的Slider。需要将Handle Slide Area也就是滑块删掉。

我以为将滑块删掉就万事大吉不用改了,谁知却遇到一个问题。Value为0的时候,血条在表现上还有残留的血量:

Value为1的时候,血量却还没填满整个血条:

后来发现要将Fill Area及其孩子Fill的Left和Right都调成0才行。这样问题就解决了。

这里Left是指UI控件的左边缘相对于Anchors Min X的距离,Right是右边缘相对于Anchors Max X的距离。

在东京参加Global Game Jam 2018

去年在回答知乎的问题《参加 Global Game Jam 2017(全球游戏创作节) 是一种怎样的体验?》时,我就表示希望今年能够参加日本区的GGJ。现在如愿以偿。本篇GGJ记事会分为以下几部分来讲述这次在东京参加Global Game Jam 2018的体验:

  • 日本GGJ的特点

此次东京GGJ跟去年我在广州天河站的体验相比,主要有以下几点不同:

  • 规模小

东京虽然是个超大型城市,但这里的GGJ规模比起广州却小得多。此次GGJ在东京都一共有4个会场,可所有会场加起来恐怕都没有北上广深的一个会场大,尤其每个会场的报名名额还十分有限。大概是因为在东京很难找到中国那样的大场地吧。最大的场地在东京工科大学,定员100人,却没报满。其余3个场地都是借用企业办公楼的会议室,所以场地小,全是定员20多人。我因为更想接触一下业界的人,也想体验一下小会场的感觉,所以选择了定员24人的BeXide会社。然而这个站居然也没报满。

BeXide会社的会场站点入口

继续阅读在东京参加Global Game Jam 2018

Game Jam头脑风暴训练

很久没更新博客了。自从去年9月底开启我的海外生涯以来,这4个月里一边上学一边工作,忙得呜呼哀哉。半个月前辞掉国内的Web开发工作后(这里还是要再次感谢前领导左哥给了我那么久远程工作的机会),终于得以将精力投入到在日本做游戏的道路上。

通过去年在Global Game Jam认识的独立开发者Fair的介绍,我幸运地结实了正在日本创业的《次元树之战》的开发者云海。接下来我会加入他的团队一起做事情,也会跟着他学习游戏设计。

云海凭着兴趣自己做的游戏《次元树之战》。知乎上还有一篇对他的采访:https://zhuanlan.zhihu.com/p/20146045

彼时辞职时正好赶上云海约团队的四个人一起出来做game jam头脑风暴训练。正好那时离Global Game Jam 2018还有一周多,可以顺带当作热身。

继续阅读Game Jam头脑风暴训练

EMwI更新:版本1.0.2 防XSS攻击

8月底的时候External Media without Import插件在github上收到一个pull request。对方指出我的代码存在XSS漏洞。惭愧,直到最近才腾出时间仔细研究他说的问题。插件的1.0.2版本合并了对方的pull request,修复了该漏洞。

在修复之前,我的插件中有如下代码(点击查看源文件):

这个函数将width 、height 和mime-type等信息通过 urlencode编码后设置为url的参数,然后重定向到该url。在url的响应函数中,我调用了 urldecode读取来这些信息: 继续阅读EMwI更新:版本1.0.2 防XSS攻击

《游戏设计梦工厂》练习1.2 D.O.A.

找一个你玩过的D.O.A.(dead on arrival,是指一个游戏玩起来完全没有任何乐趣,一上市就被认定失败)的游戏。写下来你喜欢这个游戏的哪些部分。哪些部分是设计师忽略掉的?这个游戏可以如何提高?

基本上能被我玩到的游戏都是在上市后至少活了一段时间的。上市就被认定失败的游戏也无缘被我知道。目前我能想到并玩过的存活时间最短的游戏恐怕就是我刚工作时参与开发的一个MMORPG——《寻龙》。这款游戏上线后一年不到就停运了。

运营不到一年就停运的游戏《寻龙》

《寻龙》的失败有多方面的原因,包括设计、技术和运营等。但是这个作业练习仅谈论设计。

继续阅读《游戏设计梦工厂》练习1.2 D.O.A.