文章

被NTFS的bug困扰了一个多星期

这篇文章其实写于2012年5月2日。原文是发表在我的CSDN博客上:《被NTFS的bug困扰了一个多星期》。昨天收到一条评论说文章写得太有趣了。于是把文章又读了一遍,感觉的确是一段宝贵有趣的回忆。因此不禁想把它搬到自己的个人站点上做个备份。珍贵的东西放在别人家里总是怕不知哪天就被丢掉了。其实我的CSDN博客上还有几篇我自认为更有趣的故障排除类的日志,有空时也会一篇篇搬过来。

原文发表的时候还是Windows 7的年代。当时微软也已经就文中提到的bug发布了补丁。如今已经是Windows 10的年代,虽然我没亲自验证,但这个bug在Windows 10上估计已经不存在了吧。

// ========= 一点也不华丽的分割线,以下是原文 =========

继续阅读被NTFS的bug困扰了一个多星期

《家园》与《浴火银河3》的宇宙

我对太空类游戏一直很有好感。当舰船在太空中徜徉时,宇宙的浩瀚与孤独令我着迷。迄今为止我玩过的游戏当中,最喜欢的作品——《家园》就是以太空为背景;最近喜欢上的一款游戏——《浴火银河 3》(英文名《Galaxy on Fire 3》),也是太空题材。

虽然两者同为太空背景,世界观庞大,但从游戏类型上讲两者其实是很不一样的游戏——前者是传统的即时战略PC游戏,操作繁杂,地图边界极大,节奏缓慢;后者是飞行射击类手游,操作简单,地图边界很小,节奏明快。

这两天突然感觉,这种区别在两者对宇宙的塑造上也有很明显的体现。

家园

《家园》的宇宙给我的感觉是干净、浩瀚而空旷。舰队在航行途中难得遇到其它人造航天器,就连陨石也并不是经常能遇到。至于星球就更是只在故事开头和结尾存在(分别是故事中玩家种族的居住星球和起源星球)。虽然有时远处(天空盒)有一些绚丽灿烂的星云,但是我也只会觉得它们很美,而不会期待星云里有很多东西。

《家园》的宇宙干净、浩瀚而空旷,远处的星云虽绚丽,但仍不失平静。

继续阅读《家园》与《浴火银河3》的宇宙

将《拳皇》做成桌游

乍一听这是一件非常不可思议的事情。《拳皇》是一款考验操作与反应的格斗游戏,而桌游普遍玩的是策略、概率与谈判。这两者如何能结合到一起呢?难道要真人快打?

格斗游戏《拳皇》

前段时间身边的两位策划——云海和热心就用一个下午做了这样的练习。由于事务繁忙,我并没有参与其中,只是一边做事一边旁听。现在是凭印象写下这篇文章,因此无法将每个细节都写得很清楚。

动作游戏也有策略元素

根据云海的分析,虽然《拳皇》考验操作与反应,但其游戏性含有很强的策略成分。换个说法,要玩好这种格斗游戏,除了练好操作与反应,意识也很重要。策略性也让不同玩家形成了不同的打法风格。比如有的玩家喜欢以攻为守;有的玩家喜欢防御为主,抓住对手破绽反击;尤其有的玩家打法很“龟”很猥琐,从不正面攻击,经常后跳发波。

其实很多经典的动作游戏都蕴含着至少一定程度的策略元素。没有任何策略元素的动作游戏即便再有趣,其乐趣也很短暂,无法让玩家感觉到有持续深挖的价值,也很难带来回味无穷的感觉。一个典型的例子是打地鼠。

因此如果要把《拳皇》这种格斗游戏改成桌游,我们可以做的是把策略部分的核心机制提炼出来,用桌游来实现。

继续阅读将《拳皇》做成桌游

关于游戏的“正规元素”

在阅读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