我一直在搞乱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));
如果我每帧都应用它或者禁用重力,线速度只会产生显着差异。谁能弄明白我做错了什么?
答案 0 :(得分:1)
Box2d不支持零重力模拟;这就是为什么你在禁用重力时没有看到差异的原因。你也可能看不到什么差异,因为(0, 1)
的引力很弱;试试(0, 10)
。
同样setLinearVelocity
是一个rayCast函数。您可能正在寻找applyForce()
。
答案 1 :(得分:0)
如果在主体上设置线速度,则意味着它将按照向量设置的速度移动。如果禁用重力,则不会影响此运动,但是在启用重力的情况下,每次运动都会受到重力的影响。如果你在外太空投掷一个苹果,它会在射击方向上无限移动,但在地球上,重力会不断地将它拉下来。如果你想要按照你想要的方向直接移动你的身体,那么你必须每帧都设置线速度。观看this教程,#2.35和#2.36,可以很好地解释问题。
祝你好运