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

Cocos2d iphone 如何在box2d中实现更好的时间步长(固定或半固定)?,cocos2d-iphone,box2d-iphone,physics-engine,Cocos2d Iphone,Box2d Iphone,Physics Engine,我想知道是否有人能帮助我理解在box2d内固定时间步长。我试图通过实现更好的时间步(我目前使用内置的可变时间步)来改进我刚刚发布的一款游戏。我一直在阅读一些有用的信息,但我无法真正理解如何将类似于内置cocos2d/box2d模板的东西变成类似于解决方案的东西 TL;DR(我想将cocos2d/box2d游戏时间步长从内置的可变时间步长更改为更一致的时间步长) 谢谢 Steve为了实现这一点,您需要知道物理引擎在仍能充分执行的情况下可以执行的最大时间步长。为了论证起见,假设它是0.03秒 本质上

我想知道是否有人能帮助我理解在box2d内固定时间步长。我试图通过实现更好的时间步(我目前使用内置的可变时间步)来改进我刚刚发布的一款游戏。我一直在阅读一些有用的信息,但我无法真正理解如何将类似于内置cocos2d/box2d模板的东西变成类似于解决方案的东西

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

谢谢


Steve

为了实现这一点,您需要知道物理引擎在仍能充分执行的情况下可以执行的最大时间步长。为了论证起见,假设它是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;  
    }  
}
Update:(float)deltaTime
{  
浮动最大步长=0.03;
浮动进度=0.0;
while(进度
好的,谢谢Jordaan。这是迄今为止我听到的最简单的解释。因此,在我调用的init方法中:
[self schedule:@selector(tick:)]
是否需要包含其他参数?此外,此实现是否会在不同的设备上创建一致(几乎相同,如果不相同)的模拟,这些设备可能以不同的FPS(即iphone 3gs和iphone 4)显示?是的,基本上是这样。这一切都取决于您选择最大步长值的程度。四处试验,查看box2d的文档,看看它们是否提供了一个值。但是,还要注意,将该值设置得太低会降低整体性能,因为物理系统必须更频繁地工作。太好了。我已经实现了这个解决方案,一切似乎都运行得更加一致。我需要更多的测试,但再次感谢乔丹,这就是我一直在寻找的。