简介
逻辑与渲染分离,即逻辑运算为一个部分,渲染表现为一个部分。渲染表现依赖于逻辑运算的结果,但逻辑运算不会受到渲染表现的影响。
因此,逻辑与渲染可以获得不同的更新频率,通常是逻辑计算的频率要低于渲染,这样可以减少复杂逻辑的性能开销。
渲染表现在每两个逻辑帧之间进行插值,这样就能使画面平滑,不会因为低频逻辑更新而产生顿感。
实现
如果项目结构是面向对象的话,可以考虑使用事件来通知渲染对象更新数据并插值,或者渲染对象持有逻辑对象,在更新的时候获取对应数据。
本例使用的是 ECS 的结构,因此只需要在渲染系统写好插值逻辑,系统自然会遍历更新。
- 如果目标位置或旋转有更新,直接重置上一位置和旋转为当前渲染对象的坐标和旋转,并重置插值进度为 0。
- 更新插值进度。
- 根据上一位置或上一旋转和目标位置或目标旋转,进行 lerp 插值,然后赋值给渲染对象。
- 如果插值进度完成,则重置上一位置和旋转为当前渲染对象的坐标和旋转,并重置插值进度为 0。
如果有缩放需求的也可以同理操作。
上图白色线框为逻辑包围盒位置,可以看出逻辑更新频率低的情况下有顿感,渲染对象的方块追逐逻辑位置插值靠近。
更新日志
- 更新基础内容。