0

我对 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);

初始化方法:

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()));

会是什么呢?多谢!

4

2 回答 2

1

我认为问题出在这一行

body.setLinearVelocity(new Vec2(getLastDirection().getX() * getSpeed(), 
getLastDirection().getY() * getSpeed()));

注释此行并运行您的程序。

于 2013-09-03T06:10:35.500 回答
0

@Epi 如果您根本不需要重力。那么你可以做

world = new World(new Vec2(0,0));

bt 根据您的解决方案,您已将 body 的重力比例设置为 0,这肯定可以正常工作。

Bt 我认为在更新方法中,您正在设置与重力无关的物体线速度。

因此,当您调用 world.step(---) 时,它会在一个实例中设置身体的速度和您的身体消散器。

所以我认为你应该调试你的价值是什么

(new Vec2(getLastDirection().getX() * getSpeed(), getLastDirection().getY() * getSpeed())

整个你的问题只出在这一行。玩它会解决你的问题。

于 2013-09-03T06:28:57.937 回答