在 box2d 中投掷标枪的物理学
physics of javelin throwing in box2d
我正在尝试使用 box2d 在 libgdx 中制作一个标枪投掷游戏,但由于 box2d 的物理特性,标枪准确地落在投掷处而不是落在它的头上。
我已经尝试应用 angular Impulse,但对于我尝试过的每个公式,它仍然看起来不真实。 box2d中有什么可以解决这个问题的吗?
private void throwJavelin() {
PolygonShape rect = new PolygonShape();
rect.setAsBox(1.5f,0.05f);
BodyDef bd = new BodyDef();
bd.type = BodyDef.BodyType.DynamicBody;
Body javelin = world.createBody(bd);
javelin.setUserData("javelin");
javelin.setTransform(firingPos, angle);
javelin.createFixture(rect,1);
float velX = -( -MathUtils.cos(angle) * (strength/4));
float velY = -( -MathUtils.sin(angle) * (strength/4));
javelin.setLinearVelocity(velX, velY);
float omega = -3/strength;
javelin.applyAngularImpulse(omega, true);
}
由于标枪的角度受到 drag/air 摩擦力的影响,而 box2d 不处理阻力,因此您必须想出一些解决方法。如果你在每一步都设置相对于速度矢量的角度,它看起来自然吗?
有an online tutorial by iforce2d that explains how to do what you're asking。我建议检查一下。
还有 a video demonstration 我认为有用的结果,建议查看。
我正在尝试使用 box2d 在 libgdx 中制作一个标枪投掷游戏,但由于 box2d 的物理特性,标枪准确地落在投掷处而不是落在它的头上。
我已经尝试应用 angular Impulse,但对于我尝试过的每个公式,它仍然看起来不真实。 box2d中有什么可以解决这个问题的吗?
private void throwJavelin() {
PolygonShape rect = new PolygonShape();
rect.setAsBox(1.5f,0.05f);
BodyDef bd = new BodyDef();
bd.type = BodyDef.BodyType.DynamicBody;
Body javelin = world.createBody(bd);
javelin.setUserData("javelin");
javelin.setTransform(firingPos, angle);
javelin.createFixture(rect,1);
float velX = -( -MathUtils.cos(angle) * (strength/4));
float velY = -( -MathUtils.sin(angle) * (strength/4));
javelin.setLinearVelocity(velX, velY);
float omega = -3/strength;
javelin.applyAngularImpulse(omega, true);
}
由于标枪的角度受到 drag/air 摩擦力的影响,而 box2d 不处理阻力,因此您必须想出一些解决方法。如果你在每一步都设置相对于速度矢量的角度,它看起来自然吗?
有an online tutorial by iforce2d that explains how to do what you're asking。我建议检查一下。
还有 a video demonstration 我认为有用的结果,建议查看。