从文件生成/构建映射

时间:2012-11-03 10:34:10

标签: c# algorithm xna

使用我想要创建地图的文件,我想知道这样做的最佳方法。 实际上我搜索了论坛,但我只发现了随机创建地图的地图生成算法。

让我们看一个最小的例子。 例如我有一个包含

的文件
0110
1001
1000
0000

0都是水,每1都是地球。 我会通过简单地使用两个不同的位图并将它们加载到正确的坐标来处理这个问题。那很简单。

但我们猜测我们有一张1000 * 1000的大地图,每帧只有16 * 16块的足够空间。然后我会得到当前位置并围绕它构建地图。

假设我们只能显示3 * 3个图块,使用最小示例并位于位置(2,2),其中x和y是元素1..4,因此用户此时可以看到的是:

011
100
100

解决方案

我考虑使用文本文件,其中一条线代表x坐标方向和 列表示y坐标方向。整个文件正在程序开头加载。假设1个tile需要1个字节,这不应该使用太多ram,这应该足够了。

为了在用户移动时重新绘制地图,我将获得移动方向并将当前位图滑动到相反方向的平铺高度/宽度,并仅查找新空白的位图。因此,我只需要查找m + n-1的平铺信息(其中m是y中显示的平铺量和x方向上的n)平铺(如果移动对角线则为最大情况),而不是每次都加载m * n个平铺用户移动。

实施例

我创建了一个示例,使上面给出的示例更容易理解。 这是整个地图:

whole map

我们只能显示3 * 3个瓷砖,用户位于(2,2)位置,所以我们实际看到的是:

starting position

现在他正走向右下角:

Moving

并且黑框部分向相反方向移动,以便我们得到:

after redrawing

现在必须查找空白区块(黑框白色区域),最终结果将是:

final image

问题

这是建立地图的好方法吗?或者有更快的功能,可能已经在microsoft xna-gamestudio包中实现了?

1 个答案:

答案 0 :(得分:2)

我会在屏幕视图之外预取1-2个磁贴范围,这样当玩家移动时你就不会有奇怪的弹出窗口。

但如果你的游戏是一个自上而下的平铺游戏,这个解决方案是相当保守的。在今天的大多数硬件中,您可以毫无问题地在播放器周围创建一个非常大的范围。只需看看Minecraft可以处理和显示的块数。由于您正在重复使用相同的纹理,因此您只需加载一次资产并在一个磁贴中重复使用它,这可能是一个内存占用很少的对象。

您是否尝试过实施它?