这个项目从像素级开始,来一点点复刻尼尔 E 结局,没有使用游戏引擎,没有使用额外的素材,很多视觉和运动特效都是通过一些纯粹的数学物理方法 + 代码制作出来的。
- 光晕效果:用一个中心权值大,周围权值小的一个卷积核把原始的亮度渐变圆卷积出来;
- 光晕半径与亮度的周期性变化:利用三角函数计算得来;
- 闪烁效果:在三角函数的波峰附近添加随机函数实现。
- 随机轨迹的外驱力:等时间间隔地在一定范围内生成随机点,利用 PID 算法中的"P",即根据上一时刻的位置与新生成的位置之间的距离,等比例地设置回调力;
- 随机轨迹的平滑:利用动量保持的思想,在利用回调力来更新其速度时,将保留一部分的历史速度。
- 轨迹的驱动力:根据万有引力,在某几个位置设置引力源,这些引力源来共同为粒子提供驱动力;
- 粒子群的初速度设置:通过差异化的初速度设置,使得粒子被引力源所捕获,或逃逸,从而形成不同轨迹(抛物线,双曲线,椭圆),能让整个粒子群的轨迹效果看起来飘逸一点。
- 小飞机旋转角度的确定:通过鼠标与小飞机之间的连线与水平的夹角,确定小飞机当前相对于水平线的旋转角;
- 小飞机的旋转的实现:在绘制小飞机的各个部件的顶点时,使用的都是相对于小飞机中心点的相对坐标,在需要旋转时,利用线性代数中的旋转矩阵,将其与这些相对坐标相乘,即可实现旋转。
还有很多很多的地方用到了其它的数学或物理方法,就不一一赘述了。