问题描述
我想知道如何使用带有给定种子的 PRNG 来获得相同的结果,即使在多线程处理过程中也是如此。
说明:
世界将使用诸如 Perlin 或 Simplex 之类的相干噪声来生成高度,此噪声将由 World Seed
确定。然后我希望每个块产生一些随机性,例如在块内放置多少棵树,放置树木的位置,应该放置多少朵花等等。每次相同 {{1} } 给出。可以根据玩家来自哪个方向,以不同的顺序加载块,每次游戏运行时,(如果玩家来自北方,则其顺序会有所不同,如果玩家来自南方,则顺序不同)。
如何跨线程使用 Seeded RNG,以便可以按任何顺序生成块,并且仍然获得与上次相同的结果。
编辑:
解决方案可能是使用块位置(即 x,y 坐标)和世界种子为每个块生成一个新的 PRNG。然而,这意味着每个块都需要生成一个新的 PRNG 来获得一定数量的随机数,这真的是避免问题的最佳方法吗?
解决方法
只要您并行处理块(例如,每个线程一个块),多线程就应该没有问题,这对于柏林噪声是正确的,因为不需要其他块的知识。 您将遇到的唯一问题是确定所需块的大小,不要太小也不要太大...... 关于 Java 查看线程池:https://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html