如何在自上而下的游戏中向身体施加力?
How to move apply force to bodies in a top down game?
所以我正在制作一个自上而下的游戏,玩家使用 WASD 键移动。为此,我使用
if (Gdx.input.isKeyPressed(Input.Keys.S) && b2dBody.getLinearVelocity().y >= -0.8) {
b2dBody.applyLinearImpulse(new Vector2(0, -PLAYER_SPEED), b2dBody.getWorldCenter(), true);
} else if (Gdx.input.isKeyPressed(Input.Keys.W) && b2dBody.getLinearVelocity().y <= 0.8) {
b2dBody.applyLinearImpulse(new Vector2(0f, PLAYER_SPEED), b2dBody.getWorldCenter(), true);
} else if (Gdx.input.isKeyPressed(Input.Keys.A) && b2dBody.getLinearVelocity().x >= -0.8) {
b2dBody.applyLinearImpulse(new Vector2(-PLAYER_SPEED, 0), b2dBody.getWorldCenter(), true);
} else if (Gdx.input.isKeyPressed(Input.Keys.D) && b2dBody.getLinearVelocity().x <= 0.8) {
b2dBody.applyLinearImpulse(new Vector2(PLAYER_SPEED, 0), b2dBody.getWorldCenter(), true);
}
但是因为重力设置为 0 world = new World(new Vector2(0, 0), true);
body 不会停止。我想知道是否有办法在让 body 停止一段时间后保持重力不变?提前致谢。
创建 box2d 主体时,您可以设置用于创建主体的 BodyDef 对象的 linearDamping
值。
当对象移动时(例如,应用线性脉冲时),此值将始终减慢对象的速度。
你可以这样使用它:
BodyDef bodyDef = new BodyDef();
//set other body values
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set(42f, 42f);
bodyDef.angle = 0f;
//...
bodyDef.linearDamping = 10f; // this will make the body slow down when moving
//create the body
Body body = world.createBody(bodyDef);
// TODO move the body arround and it will automatically slow down
所以我正在制作一个自上而下的游戏,玩家使用 WASD 键移动。为此,我使用
if (Gdx.input.isKeyPressed(Input.Keys.S) && b2dBody.getLinearVelocity().y >= -0.8) {
b2dBody.applyLinearImpulse(new Vector2(0, -PLAYER_SPEED), b2dBody.getWorldCenter(), true);
} else if (Gdx.input.isKeyPressed(Input.Keys.W) && b2dBody.getLinearVelocity().y <= 0.8) {
b2dBody.applyLinearImpulse(new Vector2(0f, PLAYER_SPEED), b2dBody.getWorldCenter(), true);
} else if (Gdx.input.isKeyPressed(Input.Keys.A) && b2dBody.getLinearVelocity().x >= -0.8) {
b2dBody.applyLinearImpulse(new Vector2(-PLAYER_SPEED, 0), b2dBody.getWorldCenter(), true);
} else if (Gdx.input.isKeyPressed(Input.Keys.D) && b2dBody.getLinearVelocity().x <= 0.8) {
b2dBody.applyLinearImpulse(new Vector2(PLAYER_SPEED, 0), b2dBody.getWorldCenter(), true);
}
但是因为重力设置为 0 world = new World(new Vector2(0, 0), true);
body 不会停止。我想知道是否有办法在让 body 停止一段时间后保持重力不变?提前致谢。
创建 box2d 主体时,您可以设置用于创建主体的 BodyDef 对象的 linearDamping
值。
当对象移动时(例如,应用线性脉冲时),此值将始终减慢对象的速度。
你可以这样使用它:
BodyDef bodyDef = new BodyDef();
//set other body values
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set(42f, 42f);
bodyDef.angle = 0f;
//...
bodyDef.linearDamping = 10f; // this will make the body slow down when moving
//create the body
Body body = world.createBody(bodyDef);
// TODO move the body arround and it will automatically slow down