我最近将渲染时间步长与物理时间步长分开。物理运行在20hz,客户端将精灵位置从前一个位置插入每个渲染调用的当前物理位置。我正在使用Gaffer on Games: Fix Your Timetep!中的技术。此代码位于渲染(delta)调用中。
if (delta > 0.25f) delta = 0.25f;
accumulator += delta;
while (accumulator >= physicsStep) {
update(physicsStep);
accumulator -= physicsStep;
}
interpolate(accumulator / physicsStep);
renderWorld();
这是更新(physicsStep)
prevPosition.set(position);
physPosition.add(velocity.cpy().scl(physicsStep));
bounds.setCenter(physPosition);
这是插值(alpha)
position.set(prevPosition).lerp(physPosition, alpha);
它大部分时间都很顺利呈现,但正如我所说的那样,每个人都会开始抖动。一段时间后它再次变得光滑。关于如何处理这个的任何想法?
我一直在搞乱它,而且抖动是由插值和#34;减速"引起的。就在它到达目标位置(当前物理位置)之前。它运行平稳时不会减速,只有当它抖动时才会减速。