Language agnostic 构建游戏地图的最佳方法

Language agnostic 构建游戏地图的最佳方法,language-agnostic,Language Agnostic,我正在编写一个小型俯视RPG,非常类似于经典的Ultima系列。我需要一种快速而肮脏(比肮脏更快)的方法来设计大型地图——比如说1000块x 1000块,我需要一些帮助来思考如何去做这件事 我想说有50-60种不同类型的瓷砖——森林、河流、平原等等 到目前为止,我能想出的最好办法是 定义一个数组(或一些类似的结构)来保存两条关键信息-一个位置/坐标标识符和一个1-60之间的整数,定义它是什么类型的平铺 在光栅编辑应用程序中,绘制1000px x 1000px的图像。使用50种不同颜色的调色板,

我正在编写一个小型俯视RPG,非常类似于经典的Ultima系列。我需要一种快速而肮脏(比肮脏更快)的方法来设计大型地图——比如说1000块x 1000块,我需要一些帮助来思考如何去做这件事

我想说有50-60种不同类型的瓷砖——森林、河流、平原等等

到目前为止,我能想出的最好办法是

  • 定义一个数组(或一些类似的结构)来保存两条关键信息-一个位置/坐标标识符和一个1-60之间的整数,定义它是什么类型的平铺

  • 在光栅编辑应用程序中,绘制1000px x 1000px的图像。使用50种不同颜色的调色板,我绘制我的地图-1个像素对应1个瓷砖。比如说,对于给定的水砖,我将以某种蓝色阴影绘制一组像素。另存为.gif或.png

  • 编写一些处理器,然后分析前面提到的gif/jpg并逐像素分析。它根据像素的RGB值确定平铺类型。然后,处理器代码生成一些填充映射数组的例程

到目前为止,我认为一定有更简单的方法

试试sourceforge:

其中一些编辑器将保存为某种标准格式,然后您可以根据需要将其拉入游戏中


甚至会输出可以直接编译到引擎中的头文件/源文件(不确定您需要什么)

对我来说,这听起来是一个很好的方法。但是,您可能会发现创建自定义地图生成器同样简单


另一种选择可能是编写一个程序,允许您仅定义主要功能的位置,而生成器程序将填充其余部分。(例如:从x1,y1到x2,y2的河流。以x,y等为中心的“大”福勒斯特河)。这样,您就可以仅从较小的地理要素文件中定义大型地图。将其视为类似于矢量绘制,而不是指定光栅中的最后一个像素。:-)

是否需要基于平铺?看看Daniel Cook的网站,他不仅为您提供了一些美味的免费艺术品,而且还讨论了游戏中任意放置图像的出现,而不是瓷砖:

“从前,你需要使用 所有的东西都是方形的小瓷砖。 如今,没有真正的必要这样做 制作一个基于平铺的2D引擎 具有完整alpha和 很多填充率,你可以把 一起玩游戏就像一本贴纸书。 在任意位置下拉图形 像疯子一样的位置和层次。 像Aquaria这样的游戏看起来很棒,也很有趣 到处都看不到瓷砖。”


其中还有一个链接,用于制作基于的游戏内编辑器。

另一个选项是生成(像素)地图或直接生成游戏地图。这当然取决于你的世界的大小,如果你有很多特定的资源(此时的城市,此时的矿山…)

网站上有很多关于这个主题的文章,都是关于“流氓”游戏的,这是非常有用的。(举个例子)

他们还讨论了允许更多变化的数据结构(例如,有一个基础图像,并且在地图阵列中定义表示时随机添加一些(小的)“条纹”图像。例如,在草地上添加一些小岩石)。其他效果如ultima V中所示,其中一些屋顶元素在经过时变得透明,它们也基于这些结构

我们发现拥有一个图像(在我们的例子中,一组图像)是很容易的,因为你可以在有时间的时候升级外观(不再是矩形森林!),并专注于特定的任务位置

问候


Guillaume

我建议将您的位置信息作为存储数据结构的索引信息,而不是您在其中查找的信息。即

int get_terrain_type(int x, int y) {
    return terrain[x][y];
}

(不完全确定这不是你的意思,但我想我应该把它说出来。)

+1用于开箱思考!我整晚都在这里,伙计们!