我正在开发一款带有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_;
}
}
有谁知道为什么我的游戏表现得像这样?
感谢您的帮助
答案 0 :(得分:0)
与文章相比,该代码本身似乎没有任何问题。您可以尝试在https://gamedev.stackexchange.com/上发布此内容,看看他们是否有任何建议。
或者,here是一篇写得很好的文章,关于半固定的时间步长,以及解耦物理和帧速率,我认为这可能是问题所在。它不适用于Box2D,但阅读它可能会帮助您找出物理问题。