我正在开发一款游戏,并遇到了一个相当有趣的问题:如何巧妙地绘制星空。
这是一个2D游戏,因此动作可以在X和Y方向上滚动。此外,我们可以调整比例以显示更多或更少的游戏区域。我还希望星空具有虚假的视差效果,以给人深度印象。
现在我正在传统的方式中完成这个问题,即拥有一个大型星球数组,每个星球都由“深度”系数标记。为了绘制,我根据相机位置乘以“深度”系数来平移每颗星球,所以有些星球移动很多,有些移动很少。这一切都运行得很好,但是当相机移动太远或缩放太多时,我就会遇到问题,因为我的数组中只有有限数量的星球。这样做将有效,但涉及到很多代码和特殊情况,让人感到不太优雅。
这触犯了我的优雅感。一定有更好的方法实现这个目标。
我考虑过程序生成星球,这样我就可以拥有无限数量的星球:例如通过使用固定种子和PRNG来确定坐标。我需要将天空分成瓦片,通过散列瓦片坐标来生成种子,然后在每个瓦片上绘制100颗星球。这样可以在所有方向上无限扩展我的星空,同时仅需要考虑可见的瓷砖,但是这不能与“深度”系数配合使用,因为这会使一些星球超出它们的瓷砖范围。使用此算法可以只使用多层非视差星座,但是这让我感觉像是作弊。
当然,我需要在每个帧中完成所有这些操作,所以它必须很快。
你们认为如何呢?