2D游戏一般按玩家视角可以分为:侧视、俯视、斜45度。横轴游戏一般都属于侧视;俯视一般常见于一些小游戏,号称上帝视角;斜45度就是所谓的2.5D,又称为伪3D,用2D的技术产生3D的效果,主要是看美术绘制的贴图。视角不同,游戏场景的设计是有所差异,今天主要总结下前一周使用Tiled制作地图的一些思路,想了想这些视角应该都是适用的。
设想一下游戏场景中的元素:
- 草地、沙滩、湖泊。
- 高大的树木、房子。
- 桥梁、城墙。
- 白云、雨、雪。
- 可以访问的商人或功能性NPC。
- 地上跑来跑去的小怪物。
- 天空中飞鸟。
- 等等。
如何设计一个支持上述元素的地图结构?下面给一个简单的思路。
元素分类:
- 地表(Tile):使用地表(Terrian)铺成的,位于物件之下或之下。一般位置都是固定的,可以静态也可以动态。如:草地、沙滩等,湖泊等。湖泊往往要显示为水波动的效果。
- 物件(Object):在地表上面或下面、规则或不规则、位置固定或不固定的东西。如:树木、房子、NPC、怪物、飞鸟等。物件的显示需要根据其位置决定它们的遮挡。如:角色走在一棵大树的后面,就需要先绘制大树然后角色;角色移动到大树的前面,则需要先绘制角色。
地图分层:
为了支持丰富的场景元素,2D地图一般会采用分层结构。下面是一种简单的分层设计,可自行根据需求进行调整。
地表分层:
- 底层地表(Lower Tile Layer):用来放置最底层的地表元素,如:草地、沙滩。物件一般会绘制于其上。
- 中层地表(Middle Tile Layer):放置一些细节性的地表元素用来丰富地表,如:地图衔接、边界、装饰地表之类的。
- 上层地表(Up Tile Layer):可以用来实现一些烟雾效果,或者高大的城墙。上层地表绘制在所有物件之上。
物件分层:
- 地上物件(Ground Object Layer) :依附在地表之上的,如高大的树木、房子、NPC、怪物等。
- 通过物件(Pass Object Layer):绘制在地上物件之上或之下,为了实现特殊的一类需要穿越的元素,如桥梁、城墙的门洞等。
- 天空物件(Sky Objects):绘制在所有物件和地表之上,如:天空中的飞鸟。
绘制顺序:
- 底层地表
- 中层地表
- 地上物件 (第一层)
- 通过物件
- 地上物件 (第二层)
- 上层地表
- 天空物件
通过以上这样的分层和元素划分,基本上能满足RPG类游戏的各种地图需求。当然也可以简化下,比如3,4,5简化为地上物件一层即可。3,5的存在是为了支持,站在城墙上和城墙下。当然每一个物件层,遇到位置变化的游戏元素,若角色,跑来跑去的怪物,需要根据位置决定其绘制顺序。对于2D游戏,最简单的判定方式就是根据Y坐标。
制作游戏地图的工具,我选择Tiled,一个免费开源的工具。可以满足各种各样的需求,当然技术牛逼,时间充裕,阵容较大的团队自行开发也未尝不可。后续,会整理下Tiled的用法,和代码层面使用Tiled地图的方法。
以上是对2D分层设计的一些粗略想法,记录自己的思考,并供参考。
2018.05.21 于上海