作者按:本文探讨了 Isometric Game 相关的背景知识。为了避免读者感觉枯燥(除了游戏之外的有些概念确实枯燥),作者尽量采取“用图说话”的方式,文字尽量简短,图解尽量简明。而且,文字风格也尽量避免单纯地说理分析,讲求一些故事性。目的只有一个,吸引你把这篇不长不短的文章读完。最后,本文还探讨了 Isometric Game 的译法,并给出了一些等轴测投影的应用示例。
1.神秘的 Isometric Game
Making Isometric Social Real-Time Games with HTML5, CSS3, and Javascript[注1]是专门讨论 Isometric Game 开发的一本小册子。很多人,特别是非专业人士看到 Isometric 这个词,一般都会有点丈二和尚摸不着头脑。实际上,尽管很多人曾经或正在沉迷于这种游戏,但你要问他什么是 Isometric Game?保证他脑袋摇得跟波浪鼓似的。
真有意思呀,还想接着了解?没了。关于机械制图只能讲这么多了,篇幅有限,我们得加快进度。上面引用的这段话提到了一个“辅助图样”(英文是 pictorial),也就是你觉得“更形象”而实际上是更有“立体感”的那两幅图,它们与我们今天要讨论的 Isometric Game 可是有莫大的关系——都是(或基于)轴测图。
有读者可能会问:既然如此,为什么不干脆把 Isometric Game 翻译“等轴视图游戏”?这里还有点小纠结,请恕我在下一节再解释。我们暂时还只说 Isometric Game。
不管你是否真正玩过 Isometric Game,只要看一看本文第一幅插图,就很容易会发现这些游戏的画面都是由众多“菱形”的等轴测视图构成的:《城市农场》中的街区、《微城市》中的菜地、《QQ餐厅》中的地砖……当然,要说谷歌地图你肯定知道,因为基于Ajax的几乎所有网页地图都是由无数个地图切片(tile)这么无缝地拼接而成的。而在 Isometric Game 中,只不过游戏画面的切片都变成了菱形,而不是正方形。
没看出菱形来?……嗯,好吧,上图:
这幅图来自 Making Isometric Social Real-Time Games with HTML5, CSS3, and Javascript 中讨论的一个类似“经营城市”的游戏示例。上半部分是生成游戏界面所需的精灵图(sprite sheet),下半部分是游戏的界面(注意飘浮的白云)。
对,看样子瓷砖这个词还是挺贴切的。因为 Isometric Game 的界面,主要就是用这些“瓷砖”一块一块拼起来的———当然啦,拼的时候不用人工加胶水,只要通过代码循环(至少是一个嵌套循环)调用一个叫做draw()的方法(或者其他类似不管什么名字的方法),瞬间就能把所有景物、角色绘制到位。绘制的时候,每一块“瓷砖”都要精确到像素,贴到界面中不可见的一张大网格中。
前面好像说过吧, Making Isometric Social Real-Time Games with HTML5, CSS3, and Javascript是专门讨论 Isometric Game 开发的一本小册子,是我翻译的(那你怎么翻译 Isometric 的?别急,稍后我一定说)。看小胖正在优化isometric地图模块,于是就忍不住问了一句: