setLinearVelocity()无法按预期工作

时间:2012-04-14 04:26:39

标签: java box2d jbox2d

我一直在搞乱jbox2d,当一个身体的x速度受到世界引力的影响时,我感到很惊讶。这是我的代码:

    //create world
    Vec2 gravity = new Vec2(0, 1);
    boolean sleep = true;
    world = new World(gravity, sleep);
    //create wheel
    BodyDef wheelBodyDef = new BodyDef();
    wheelBodyDef.type = BodyType.DYNAMIC;
    wheelBody = world.createBody(wheelBodyDef);
    CircleShape circleShape = new CircleShape();
    FixtureDef wheelFixtureDef = new FixtureDef();
    wheelFixtureDef.shape = circleShape;
    Fixture wheelFixture = wheelBody.createFixture(wheelFixtureDef);
    wheelBody.setLinearVelocity(new Vec2(50, 0));

如果我每帧都应用它或者禁用重力,线速度只会产生显着差异。谁能弄明白我做错了什么?

2 个答案:

答案 0 :(得分:1)

Box2d不支持零重力模拟;这就是为什么你在禁用重力时没有看到差异的原因。你也可能看不到什么差异,因为(0, 1)的引力很弱;试试(0, 10)

同样setLinearVelocity是一个rayCast函数。您可能正在寻找applyForce()

答案 1 :(得分:0)

如果在主体上设置线速度,则意味着它将按照向量设置的速度移动。如果禁用重力,则不会影响此运动,但是在启用重力的情况下,每次运动都会受到重力的影响。如果你在外太空投掷一个苹果,它会在射击方向上无限移动,但在地球上,重力会不断地将它拉下来。如果你想要按照你想要的方向直接移动你的身体,那么你必须每帧都设置线速度。观看this教程,#2.35和#2.36,可以很好地解释问题。

祝你好运