0

我想知道即使在多线程处理过程中,如何使用具有给定种子的 PRNG 来获得相同的结果。

说明:
世界将使用 Perlin 或 Simplex 等相干噪声来生成高度,该噪声将由 a 确定World Seed。然后我希望每个块产生一些随机性,例如在块内放置了多少棵树,放置树的位置,应该放置多少花等等。每次World Seed给出相同的随机性时,这种随机性应该是相同的。根据玩家来自的方向,可以在每次游戏运行时以不同的顺序加载块,(如果玩家来自北方,那么如果玩家来自南方,则顺序不同)。

如何跨线程使用 Seeded RNG,以使块可以按任何顺序生成,并且仍然获得与上次相同的结果。

编辑:
解决方案可能是使用块位置(这将是 x,y 坐标)和世界种子为每个块生成一个新的 PRNG。然而,这意味着每个块都需要生成一个新的 PRNG 来获得一些随机数,这真的是避免这个问题的最好方法吗?

4

1 回答 1

0

只要您并行处理块(例如每个线程一个块),多线程应该没有问题,这对于 perlin 噪声是正确的,因为不需要了解其他块。您将遇到的唯一问题是确定所需块的大小,不要太小也不要太大......关于Java查看线程池:https ://docs.oracle.com/javase/tutorial/essential/concurrency/池.html

于 2021-06-15T16:11:27.287 回答