Box2D插值和固定时间步长

时间:2013-09-18 13:50:04

标签: java box2d libgdx interpolation

我正在使用Libgdx和Box2D以及R.U.B.E.编辑器。

我有问题。不久之前,我注意到物理特性因设备速度等原因而有所不同。 所以我搜索了这个问题,找到了http://gafferongames.com/game-physics/fix-your-timestep/的东西并且感到困惑:D 现在它最终得到了一些工作,使物理在我的所有设备上表现相同;)

但是我在更快的设备上看到我的动态身体是跳跃/故障?或类似的东西。 好吧,我发现我可以插入我的身体的位置,但有问题。 我找不到任何可以在身体姿势之间进行插值的东西。

任何人都可以向我展示一些代码片段,我可以在场景中获取所有动态物体并让它们插入位置吗? 请帮帮我:?

我把你发的东西发给你了。

对于固定的时间步长:

代码:全选

public float BOX2D_MAX = 0.25f;
public float BOX2D_STEP = 1 / 60f;

in render() method:

accumulator += dt;          

    if (dt > BOX2D_MAX){
            dt = BOX2D_MAX;
         }
         while (accumulator >= BOX2D_STEP)
         {
            resetsmooth();    

            scene.world.step(BOX2D_STEP, scene.velocityIterations, scene.positionIterations);
            accumulator -= BOX2D_STEP;

         }

         interpolation = accumulator / BOX2D_STEP;
         scene.world.clearForces();             
         smooth();

我尝试插入我的身体:

代码:全选

public void smooth( ) {


         float minusOne = 1.0f - interpolation;

         bod = scene.world.getBodies();

         //looking up for the bodies in my world
         while(bod.hasNext() == true){

               n = bod.next();

               if(n.getType() == BodyType.DynamicBody){

               smoothX = interpolation * n.getPosition().x + minusOne * nPosX;
               smoothY = interpolation * n.getPosition().y + minusOne * nPosY;
               smoothA = interpolation * n.getAngle() + minusOne * nAng;

               //transform the position
               n.setTransform(smoothX, smoothY, smoothA);   

               }
         }
   }

   public void resetsmooth(){

         bod = scene.world.getBodies();

         //looking up for the bodies in my world
         while(bod.hasNext() == true){

            n = bod.next();

            if(n.getType() == BodyType.DynamicBody){

            //getting bodies position
            nPosX = n.getPosition().x;
            nPosY = n.getPosition().y;
            nAng  = n.getAngle();      

            }
         }
      }

0 个答案:

没有答案