Skip to content

zhanglonggg/Nier-Automata-Ending-E

 
 

Repository files navigation

效果展示

游戏实机演示效果见链接:https://www.bilibili.com/video/BV1CT411g7A4

项目介绍

这个项目从像素级开始,来一点点复刻尼尔 E 结局,没有使用游戏引擎,没有使用额外的素材,很多视觉和运动特效都是通过一些纯粹的数学物理方法 + 代码制作出来的。

部分特效的实现算法简介:

开始界面的那个一闪一闪的带有光晕的粒子:

  • 光晕效果:用一个中心权值大,周围权值小的一个卷积核把原始的亮度渐变圆卷积出来;
  • 光晕半径与亮度的周期性变化:利用三角函数计算得来;
  • 闪烁效果:在三角函数的波峰附近添加随机函数实现。

E 结局中敌人的随机轨迹:

  • 随机轨迹的外驱力:等时间间隔地在一定范围内生成随机点,利用 PID 算法中的"P",即根据上一时刻的位置与新生成的位置之间的距离,等比例地设置回调力;
  • 随机轨迹的平滑:利用动量保持的思想,在利用回调力来更新其速度时,将保留一部分的历史速度。

E 结局中红色粒子特效的轨迹:

  • 轨迹的驱动力:根据万有引力,在某几个位置设置引力源,这些引力源来共同为粒子提供驱动力;
  • 粒子群的初速度设置:通过差异化的初速度设置,使得粒子被引力源所捕获,或逃逸,从而形成不同轨迹(抛物线,双曲线,椭圆),能让整个粒子群的轨迹效果看起来飘逸一点。

E 结局中小飞机的旋转:

  • 小飞机旋转角度的确定:通过鼠标与小飞机之间的连线与水平的夹角,确定小飞机当前相对于水平线的旋转角;
  • 小飞机的旋转的实现:在绘制小飞机的各个部件的顶点时,使用的都是相对于小飞机中心点的相对坐标,在需要旋转时,利用线性代数中的旋转矩阵,将其与这些相对坐标相乘,即可实现旋转。

还有很多很多的地方用到了其它的数学或物理方法,就不一一赘述了。

About

暨南大学C++课程大作业——尼尔E结局

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 88.7%
  • C 11.3%