我在使用jbox2d时遇到了一个小问题。
只要方法world.step被调用,我的动态身体就会移出原来的位置。我试着打印其他的东西(静态物体的位置和动态物体的运动),这是正确的。
我认为这与重力有关(我不需要),但在我将世界和动力学体设置为0.0f后,它仍然会出现同样的问题。
可能是什么?
代码:
等级(建造师)
world = new World(new Vec2(0,10.0f));
级别(更新方法)
world.step(1/60.0f, 8, 3);
动态实体(构造函数)
physicsX = x / Map.METER_IN_PIXELS;
physicsY = y / Map.METER_IN_PIXELS;
initPhysicalBody(world);
init方法:
public void initPhysicalBody(World world)
{
BodyDef bd = new BodyDef();
bd.type = BodyType.DYNAMIC;
bd.position.set(physicsX, physicsY);
bd.gravityScale = 0;
PolygonShape ps = new PolygonShape();
ps.setAsBox(getFrameSize().width(), getFrameSize().height());
FixtureDef fd = new FixtureDef();
fd.density = 1;
fd.shape = ps;
body = world.createBody(bd);
body.createFixture(fd);
System.out.println(body.getPosition());
}
更新方法
body.setLinearVelocity(new Vec2(getLastDirection().getX() * getSpeed(),
getLastDirection().getY() * getSpeed()));
可能是什么?非常感谢!
我认为问题出在这一行
body.setLinearVelocity(new Vec2(getLastDirection().getX() * getSpeed(),
getLastDirection().getY() * getSpeed()));
评论这一行并运行您的程序。
@Epi如果你根本不需要重力。然后你可以做
world = new World(new Vec2(0,0));
bt根据你的解决方案,你已经将物体的重力等级设置为0,这肯定会很好。
我认为在更新的方法中,你正在设置物体的线速度,这与重力无关。
所以当你们称之为world.step(---)时,它设定了身体的速度,你们的身体在一个例子中消散。
所以我认为你应该调试的价值
(new Vec2(getLastDirection().getX() * getSpeed(), getLastDirection().getY() * getSpeed())
你的全部问题只在于这一行。。玩它会解决你的问题。