我正在使用带有 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();
}
}
}