- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在考虑制作一款具有伪无限运行时程序生成世界的俯视 2D 游戏。我读过几篇关于程序生成的文章,也许我误读或误解了它们,但我还没有看到一篇解释如何将世界分成 block (就像 Minecraft 显然那样)。
显然,我只需要生成玩家当前可以看到的世界部分。例如,如果我的游戏是基于图 block 的,我可以将世界分成 n*n 个 block 。如果玩家在这样一个 block 的边界,我也会生成相邻的 block 。
我想不通的是,我究竟如何采用一种程序化的世界生成算法,并且一次只在一个 block 上使用它。例如,如果我有一个算法可以生成一个跨越许多 block 的大型结构(例如城堡、森林、河流),我如何调整它以仅生成一个 block ,然后再生成相邻的 block ?
如果我完全错过了一些明显的东西,我深表歉意。提前致谢!
最佳答案
研究 Midpoint displacement algorithm .请注意,沿一侧的所有点均基于角的起始值。您可以在不知道网格其余部分的情况下计算它们。
我使用这种方法来生成地形。我需要每个地形“ block ”的边缘与相邻的 block 对齐。我使用中点位移算法的一种变体,以便仅根据两个角的值计算沿 block 边缘的每个点的高度。如果我需要添加随机性,我会使用来自两个角的数据为随机数生成器播种。这样,任何两个相邻的 block 都可以独立生成,并且边缘肯定匹配。
您可以将高度图方法用于其他用途。代替高度,数据可以确定植被类型、人口密度等。您可以拥有森林匹配的植被图,而不是山丘和山谷匹配的大块高度图。
对于任何一种复杂的世界,它当然都需要一些创造性的编程。
关于procedural-generation - 如何将运行时程序生成的世界划分为 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732838/
我是一名优秀的程序员,十分优秀!