位置插值无法正常工作

时间:2011-10-19 12:36:22

标签: android interpolation

我正在开发一款带有box2d的安卓游戏,并使用固定的时间步长系统推进物理学。

然而,当我使用这个系统时,它需要插入box2d位置。我看过this article 并且实现了一种非常类似于文章中插值方法的插值方法。

该方法似乎在计算机上运行良好,但在我的手机上,对象的位置非常跳跃。 PC和手机之间当然有很大的帧率差异,但我认为这个算法不应该介意。

如果您不想查看文章,请参阅以下代码:

void PhysicsSystem::smoothStates_ ()
{
    const float oneMinusRatio = 1.f - fixedTimestepAccumulatorRatio_;

    for (b2Body * b = world_->GetBodyList (); b != NULL; b = b->GetNext ())
    {
        if (b->GetType () == b2_staticBody)
        {
            continue;
        }

        PhysicsComponent & c = PhysicsComponent::b2BodyToPhysicsComponent (* b);
        c.smoothedPosition_ =
            fixedTimestepAccumulatorRatio_ * b->GetPosition () +
            oneMinusRatio * c.previousPosition_;
        c.smoothedAngle_ =
            fixedTimestepAccumulatorRatio_ * b->GetAngle () +
            oneMinusRatio * c.previousAngle_;
    }
}

有谁知道为什么我的游戏表现得像这样?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

与文章相比,该代码本身似乎没有任何问题。您可以尝试在https://gamedev.stackexchange.com/上发布此内容,看看他们是否有任何建议。

或者,here是一篇写得很好的文章,关于半固定的时间步长,以及解耦物理和帧速率,我认为这可能是问题所在。它不适用于Box2D,但阅读它可能会帮助您找出物理问题。