我怎样才能有效地装载大量的恒星系统?
我正在开发一个太空探索和战斗游戏,我可以创建星系、星云、太阳系,并根据需要按程序加载和卸载它们。也就是说玩家能看到的星星就在他们所在的地方。我有一个米
解答动态
精英可能使用的技巧是,他们不会预先生成整个星系并将其存储在数据库中。当需要时,它们可能会在运行时生成大部分星系。
I将使用伪随机但确定性的算法来实现这一点,该算法可以在运行时仅从星系的位置生成星系中每个对象的属性。
因此,当玩家放大到星系的一部分时,则运行星系块生成算法,该算法将区块坐标作为输入,并输出具有位置、颜色和大小的星星列表。相同的输入总是导致相同的输出,所以当另一个播放器稍后放大到同一块时,它们会得到相同的结果。对于不同的缩放级别,您可能有不同的算法,每种算法都会考虑上一种算法的输出,并为其添加更多细节。因此,使用最小缩放因子的算法只能生成最大的恒星(因此您可以快速生成一个同时显示整个银河系的视图),而且播放器越靠近银河系的任何部分,在该区域生成的额外小恒星就越多,当玩家点击这些星星中的任何一颗来放大它的星体系统时,星体系统生成算法就会运行。它的输入是恒星的颜色、大小和星系位置。它的输出是一个行星的类型,大小和轨道参数列表。它也是一个确定性算法,所以它总是为同一颗恒星生成相同的行星。
然后你可以对行星表面,行星表面上的城市,那些城市里的房子和那些房子里的房间做同样的事情。所以你最终得到了一个星系,它的详细程度需要一次存储大量的数据。但您不需要存储所有数据,因为任何数据都可以根据需要重新计算。
是一个非常简洁的工具,用于程序生成算法,如单纯形噪声或沃利噪声等噪声模式算法。您可以在任意位置对它们进行采样,以获得可重复的结果。另一种是标准的伪随机数生成器,它可以用一个种子值初始化,然后总是为同一个种子值生成相同的数字序列。
您真正需要存储在数据库中的是实际上无法在其上重新生成的数据需求:部分你想手工设计的星系会改变为galaxy是player actions 的结果,首先检查数据库中是否存在请求数据的此类数据集,如果不存在,你用算法生成数据。现在你只需要想出算法,产生有趣和多样的结果,然后用游戏机制,提供一个引人入胜和有趣的游戏体验,受益于所有的内容多样性。如果你有一个使用种子的确定性算法,比如PRNG的工作原理,你几乎可以不存储任何东西,并且在飞行中生成恒星的位置,只保留你当前需要的位置。想想演示场景演示是如何工作的。- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。