0

我想做一个无限的二维世界生成器。我想我会创建一个代表世界某个部分的块类。我只是不知道在哪里存储块,以及如何生成新的块。

我以为我可以将块存储在向量中并记住它们的 X,Y。对于玩家,我用指向块的指针制作了 3x3 数组(他站在中心的位置)以形成向量。例如,当他向上移动时,我将上排和中排向下移动,并从向量中加载新的块。我不知道这是不是一个好主意,这是我想到的第一件事。

无论如何,我不知道如何生成块,所以它们相互匹配(水边没有沙漠,aso)。即使生成恒定维度图对我来说也很难(我真的需要无限的世界)。

前段时间我用洪水的方法生成了恒定维度的世界,所以一开始我用草填充了整个地图,然后随机制作了水、树等点,虽然我认为这在无限世界的情况下不可用。

4

2 回答 2

4

这些问题已经在 Conway's Life 的实现中得到解决。

在 hashlife 算法和数据结构的讨论中描述了一种实现无界世界并且只处理彼此不同的部分的方法。它还处理块内的高性能和跨块的良好性能。相同的块由许多块可以指向的一种描述表示。

http://www.drdobbs.com/jvm/an-algorithm-for-compressing-space-and-t/184406478

http://en.wikipedia.org/wiki/Hashlife

http://golly.sourceforge.net/

http://tomas.rokicki.com/hlife/

http://www-users.cs.york.ac.uk/~jowen/hashlife.html

于 2012-07-09T14:00:58.147 回答
1

这可能不是正确的方法,但可能会给你一些想法。您可以做的是将 3x3 2D 块数组甚至 5x5 块数组存储到内存中。根据玩家的位置更新这些块以及加载哪些块。世界其他地方可以存储在一个文件中,可以读取和写入。当玩家在未启动的块或空块的 2-3 块内移动时,使用您想要的任何方法生成该块。

棘手的部分是,如果您有河流或水体、森林或任何其他类型的跨越多个块的景观,则在生成新块时您必须有一个单独的算法来处理这些问题。每次生成时可能需要测量两条线之间的交点。由土地和水,或平原和森林的交汇处创建的线,以及代表大块边缘的线。一旦你有了那个点,你可能可以找出块上那个点的哪一侧需要土地/水,并从那里随机生成它。

无论如何,这就是我在 Minecraft 中看到的情况。

于 2012-07-09T13:31:37.933 回答