如何在2D游戏地图中制作不同的图层

我的问题是这样的:我如何从我的spritesheet上的图纸做一个游戏地图?

我制作java 2D游戏的教程使用这种技术来制作一个游戏图:在photoshop中,我创建了一个新的文档,每个像素代表游戏地图中的一个图块。 每个瓷砖被分配一个独特的hex颜色值,从那里加载.png文件到游戏中是一件轻而易举的事情。

不过,现在我已经有了一个完整的地图,里面填满了所有的基本图块,但是它仍然是一张非常空的地图。 我要在我的草地上铺上树木,灌木,花朵。 海藻,睡莲,漂stream木和什么都不是我的水瓷砖。 各种风景,这是一个简单的游戏地图必须的。 我打算devise的这些“风景”物体中的许多大于1瓦(例如结构)。 而且不一定是整个瓷砖(有些会有透明的部分)。 我完全失去了,甚至不知道会有什么期望的答案。

我应该画一个8块瓷砖(8块瓷砖)? 我应该在基本瓷砖上画更大的物体(20×20的仓库)吗? 例如,我真正希望学到的是如何在口袋妖怪游戏中制作游戏图。

我目前的想法是在我的项目中devise一个新的类,类似于Tile类,这是一个Scenary。 像Tile一样,它将包含游戏中每个单一景物的数组,每个数组都有一个唯一的颜色代码,以.png文档中的像素表示。 表示场景和单个场景对象的起始点的像素应包含有关如何从起始位置进行渲染的信息。

如果不是完全可笑,这种方法不可能是正确的方式去。 与Tile类不同,Scenary类可能有数百个对象在其数组中。

使用位图作为地图格式,其中一个像素是一个瓦片可能是一个快速的黑客来代替一个适当的地图编辑器,但是当你的地图变得更复杂(多层,对象,区域,地图属性等),你很快就会感觉到需要一个适当的所见即所得的编辑器。 你可以自己开发这样一个编辑器,它可以重用你的graphics引擎并导出到你自己的地图格式中,或者你可以使用现有的编辑器并采用它的地图格式。 除非你对地图编辑有一些非常奇特的要求,否则我会建议你去做后者 – 这会为你节省很多时间。 我可以推荐Tiled 。

像仓库这样的大件物品通常由模块化的瓷砖制成,这些瓷砖以不同的方式组合在一起。 这里是我为开源游戏“魔法世界”制作的一个城镇瓷砖 ,这里是它的行动截图 。 正如你所看到的,建筑瓷砖可以用不同的方式组合成大或小的建筑物。

当我们开发魔力世界时,我们的graphics引擎使用了三层:

  • 地面(绘制小精灵之前绘制)
  • 边缘(按照y坐标的顺序与精灵一起绘制)
  • 过了(在精灵之后画)

一个3×2的瓷砖树由6个瓷砖组成,每层有两个瓷砖,以确保它们站在前面或后面时能够正确地重叠玩家。 后来我们在边缘层增加了对“超大瓷砖”的支持:正常宽度的瓷砖,但有几块瓷砖。 这主要是为了方便我们的制图人员,因为他们现在可以在一层上放置一棵树,而不是在三层上点击六次。 这提高了生产率,大大减less了映射错误的数量。 作为副作用,我们几乎不再使用覆盖层,因为大多数地图devise只能使用地面和边缘与超大的瓷砖完成。

从我能从你的问题中得出的结论是两个可能的答案

  • a)将您的物体绘制到类似的瓷砖表中并为其分配颜色值。 然后将它们保存到新的地图中,并将地图放在彼此的顶部。 这里的缺陷当然是,你将不得不单独计算每个tile的像素在哪里,除非你自己编写一个简单的地图编辑工具,那么你可以将地图作为一个图层逐层地保存为单独的图层甚至是层层叠叠(又名一幅巨大的图像)。
  • b)以自然格式分别创建对象,并以不同的格式保存自己的坐标。 然后轻松加载他们与您的地图,并适当渲染

虽然一旦你的地图开始变得更复杂,你将面临可扩展性问题。 在那里你需要回头去重构和你一起工作了很长时间(有时可能需要更多的时间,比从一开始就采用更灵活的解决scheme)。