2011-10-19 48 views
0

我正在開發一個帶有box2d的android遊戲,並使用固定的時間步長系統來推進物理。位置插值不正常

但是,當我使用這個系統時,它需要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

本身並代碼不出現任何問題,相比製品。您可能需要嘗試在https://gamedev.stackexchange.com/上發佈此信息,看看他們是否有任何建議。

或者,here是一篇關於具有半固定時間步長和解耦物理和幀速率的文章,我認爲這可能是問題。它不適用於Box2D,但閱讀它可能會幫助您找出物理問題。

+0

謝謝,我已經閱讀過那篇文章,並且我的實現使用了代表那裏的相同系統。我會在gamedev.stackexchange上發佈這個。 – Jason