2

Box2D と RUBE エディターで Libgdx を使用しています。

私は問題があります。しばらく前に、デバイスの速度などによって物理の動作が異なることに気付きました。そのため、この問題を検索したところ、 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();      

            }
         }
      }
4

0 に答える 0