【问题标题】:Generating/building map from file从文件生成/构建地图
【发布时间】:2012-11-03 18:52:38
【问题描述】:

使用一个文件我想创建一个地图,我想知道这样做的最佳方法。 其实我搜索了论坛,但我只找到了随机创建地图的地图生成算法。

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

0110
1001
1000
0000

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

但是让我们假设我们有一个 1000*1000 的大地图,并且每帧只有 16*16 个图块的空间。然后我会得到当前位置并围绕它构建地图。

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

011
100
100

解决方案

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

为了在用户移动时重绘地图,我会获取移动方向并将当前位图滑动到相反方向的图块的高度/宽度,并且只查找新空白空间的位图。所以我只需要查找 m+n-1 的图块信息(其中 m 是在 y 和 x 方向上显示的图块的数量)图块(移动对角线时的最大情况),而不是每次加载 m*n 个图块用户移动。

示例

我创建了一个示例以使上述示例更易于理解。 这是整个地图:

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

现在他正在向右下角移动:

黑框部分正向相反方向移动,所以我们得到:

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

问题

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

【问题讨论】:

    标签: c# algorithm xna


    【解决方案1】:

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

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

    您是否尝试过实现它?

    【讨论】:

    • 不,我首先想知道这是否是一个好方法。但我很快就会实施它。并感谢您的回复。我会尽力的;)
    猜你喜欢
    • 2010-11-30
    • 2021-08-08
    • 1970-01-01
    • 2013-07-15
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2019-04-25
    相关资源
    最近更新 更多