抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

简介

逻辑与渲染分离,即逻辑运算为一个部分,渲染表现为一个部分。渲染表现依赖于逻辑运算的结果,但逻辑运算不会受到渲染表现的影响。

因此,逻辑与渲染可以获得不同的更新频率,通常是逻辑计算的频率要低于渲染,这样可以减少复杂逻辑的性能开销。

渲染表现在每两个逻辑帧之间进行插值,这样就能使画面平滑,不会因为低频逻辑更新而产生顿感。

实现

如果项目结构是面向对象的话,可以考虑使用事件来通知渲染对象更新数据并插值,或者渲染对象持有逻辑对象,在更新的时候获取对应数据。

本例使用的是 ECS 的结构,因此只需要在渲染系统写好插值逻辑,系统自然会遍历更新。

  1. 如果目标位置或旋转有更新,直接重置上一位置和旋转为当前渲染对象的坐标和旋转,并重置插值进度为 0。
  2. 更新插值进度。
  3. 根据上一位置或上一旋转和目标位置或目标旋转,进行 lerp 插值,然后赋值给渲染对象。
  4. 如果插值进度完成,则重置上一位置和旋转为当前渲染对象的坐标和旋转,并重置插值进度为 0。

如果有缩放需求的也可以同理操作。

上图白色线框为逻辑包围盒位置,可以看出逻辑更新频率低的情况下有顿感,渲染对象的方块追逐逻辑位置插值靠近。

更新日志

2024-01-23

  1. 更新基础内容。

评论