无限级别的过程生成


16

有什么好的方法可以以程序方式生成无限2d水平?级别可以限制在任一维度上,但不一定。

到目前为止,对我来说最有意义的方法是使用基于网格的半径。例如,将游戏区域划分为具有一定大小正方形的网格,然后在玩家周围的半径内加载X个正方形。然后,当玩家移动到另一个正方形时,建立下一个集合并将其放下更远的地方(不需要持久地探索区域。)在构建正方形时,它包含随机排列的对象。当物体离开正方形的外圈时,它们将从世界上移开。有更好或不同的方法吗?或者,如果这是一种好方法,那么潜在的问题是什么?

为了讨论的缘故,您可以将其视为自上而下的小行星场,其上散布着力量起伏等。



^,因此它在右侧的“相关”列中。无需链接。
莉吉特

7
然后它变得“链接”以及“相关”-整洁,是吗?:)
jacmoe 2010年

Answers:


6

“无限”世界的一个问题是您的基础坐标可能不是无限的。有时,如果游戏充分降低了玩家的速度,则可能不必担心,因为例如达到整数回绕的时间可能太长,以至于无法达到。但是,如果允许速度差异很大,则可能需要非常精确且影响深远,因此需要考虑坐标。合理的解决方法是具有两个级别,例如网格的整数坐标和每个网格参照中的浮点坐标。

顺便说一句,您甚至可以使用网格坐标作为种子在给定的正方形中创建随机世界,从而甚至能够正确保留世界的布局。因此,当播放器离开该区域时,您可以将其放下,而当播放器返回时,您可以从种子中将其重新生成。


4
可以通过不时地以世界为中心来解决此问题。
乔纳森·费斯霍夫

还应注意的是,不仅浮点数整数,而且浮点数较高时浮点数小的变化也不准确。试试这个:float pos = 1000000000.0f; float nextPos = pos + 0.001f; float diff = nextPos - pos; 在我的机器,DIFF为0
tenpn

这些都是好点。我认为每次生成新的正方形集时都应该更新坐标,只要它足够有效即可。
科林·吉斯拉森

顺便说一句,这与PC版《我的世界》中的解决方案相同:) +1固定整数+浮点数是我认为最好的解决方案
GameDeveloper
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.