狡猾的方式画一个星空

Dav*_*ven 14 algorithm

我正在开发一款游戏,我想出了一个相当有趣的问题:聪明的方法来绘制星空.

这是一个2D游戏,所以动作可以在X和Y方向滚动.此外,我们可以调整比例以显示更多或更少的游戏区域.我也希望星空有假视差来给人一种深度印象.

现在我以传统的方式做这件事,通过拥有大量的星星,每个星星都被"深度"因子标记.为了绘制,我根据相机位置乘以"深度"来翻译每个星星,因此一些星星会移动很多,有些星星移动一点.这一切都很好,但当然因为我的阵列中有一定数量的星星,所以当相机移动太远或者我们缩小太多时会出现问题.这将全部奏效,但涉及大量代码和特殊情况.

这冒犯了我的优雅感.有一种更好的方法来实现这一目标.

我已经考虑过程序生成我的星星,它允许我拥有无限数量:例如,通过使用固定种子和PRNG来确定坐标.我需要将天空划分为瓷砖,通过散列瓷砖坐标生成种子,然后绘制每个瓷砖100颗星.这允许我无限期地向所有方向延伸我的星空,同时仍然只需要考虑可见的瓦片 - 但这不适用于"深度"因素,因为这允许星星在他们的瓦片外偏离.我可以简单地使用这种算法使用多层非视差星场,但这让我感到作弊.

当然,我需要每一帧完成所有这些,所以它必须快速.

你们都觉得怎么样?

the*_*ejh 1

由于背景中的星星移动速度不如前景中的星星,因此您可以为背景制作多层图块,并在有时间时将其替换为一层图块。哦,在背景图层中重复图案怎么样?这可能允许您预先生成所有背景图块 - 您仍然可以移动它们的高度并使用随机偏移覆盖多个背景图块等,使其看起来随机。