如何在box2d中实现更好的时间步长(固定或半固定)?

Ste*_*ght 3 cocos2d-iphone box2d-iphone physics-engine

我想知道是否有人可以帮助我理解在box2d中修复我的时间步骤.我试图通过实施更好的时间步骤(我目前使用内置的可变时间步骤)来改进我刚刚发布的Bounce Z Ballz游戏.我一直在阅读一些有用的信息,但我无法真正掌握类似于内置的cocos2d/box2d模板的东西,就像Glenn Fiedler的解决方案.

TL; DR(我想将我的cocos2d/box2d游戏时间步长从内置的可变时间步骤更改为更一致的内容)

谢谢,

史蒂夫

Jor*_*nas 8

为了实现这一点,您需要知道物理引擎在仍能充分执行的同时步进的最大时间步长.为了论证,让我们说它是0.03秒.

基本上,在更新循环期间,您不希望将增量时间传递给步进时间,而是将其分解为最大大小的段.因此,如果当前循环周期的增量时间为0.08秒,那么您将需要运行更新循环3次,时间步长为0.03秒,0.03秒,0.02秒.物理系统仍然进展了0.08秒,但它将以足够小的步骤完成,以便正常运行.

Update:(float)deltaTime  
{  
    float maximumStep = 0.03;  
    float progress = 0.0;  
    while (progress < deltaTime)  
    {  
        float step = min((deltaTime-progress), maxStep);  
        **PHYSICS STEP(step)**  
        progress += step;  
    }  
}
Run Code Online (Sandbox Code Playgroud)