我最近将渲染时间步与物理时间步分开。物理以 20hz 运行,客户端在每次渲染调用时将精灵位置从先前位置插入到当前物理位置。我正在使用来自Gaffer 的游戏技术:修复你的 Timetep!. 此代码在 render(delta) 调用中。
if (delta > 0.25f) delta = 0.25f;
accumulator += delta;
while (accumulator >= physicsStep) {
update(physicsStep);
accumulator -= physicsStep;
}
interpolate(accumulator / physicsStep);
renderWorld();
这是更新(物理步骤)
prevPosition.set(position);
physPosition.add(velocity.cpy().scl(physicsStep));
bounds.setCenter(physPosition);
这是插值(阿尔法)
position.set(prevPosition).lerp(physPosition, alpha);
大部分时间渲染都很流畅,但正如我所说的每个人都会时不时地,角色会开始抖动。一段时间后又变得光滑了。关于如何处理这个问题的任何想法?
我一直在弄乱它,抖动是由插值在到达目标位置(当前物理位置)之前“减速”引起的。平稳运行时不会减速,只有抖动时才会减速。