gpt4 book ai didi

java - 如何在 libGDX (Box2D) 中停止 body 的冲动和力而不是重力?

转载 作者:行者123 更新时间:2023-11-30 07:14:47 25 4
gpt4 key购买 nike

我正在制作一款平台游戏,现在我正在制作玩家 Action 。所以当我按“A”时,玩家向左移动(player.moveLeft());当我按“D”时,玩家移动到右侧(player.moveRigth());当我按“W”时,玩家会跳跃(player.jump())。

public void moveLeft() {
if(Gdx.input.isKeyPressed(Keys.A) &&
!Gdx.input.isKeyPressed(Keys.D) &&
body.getLinearVelocity().x > -MAXIMUM_VELOCITY){
left = true;
body.applyLinearImpulse(-3, 0, body.getPosition().x, body.getPosition().y, true);
}else if(Gdx.input.isKeyPressed(Keys.D) &&
Gdx.input.isKeyPressed(Keys.A) &&
!inTheAir){
stop();
}else if(!Gdx.input.isKeyPressed(Keys.A) &&
!Gdx.input.isKeyPressed(Keys.D) &&
!inTheAir){
stop();
}
}

public void moveRigth() {
if(Gdx.input.isKeyPressed(Keys.D) &&
!Gdx.input.isKeyPressed(Keys.A) &&
body.getLinearVelocity().x < MAXIMUM_VELOCITY){
rigth = true;
body.applyLinearImpulse(3, 0, body.getPosition().x, body.getPosition().y, true);
}else if(Gdx.input.isKeyPressed(Keys.D) &&
Gdx.input.isKeyPressed(Keys.A) &&
!inTheAir){
stop();
}else if(!Gdx.input.isKeyPressed(Keys.D) &&
!Gdx.input.isKeyPressed(Keys.A) &&
!inTheAir){
stop();
}
}

public void stop(){
body.setLinearVelocity(0, 0);
body.setAngularVelocity(0);
}

public void jump(){
if(!inTheAir && Gdx.input.isKeyPressed(Keys.W)){
inTheAir = true;
body.setLinearVelocity(0, 0);
body.setAngularVelocity(0);
body.applyLinearImpulse(0, 7, body.getPosition().x, body.getPosition().y, true);
}
}

它有效,但我遇到了一个问题:当我在跳跃之前按“A”或“D”时,当玩家跳跃并释放按键时,玩家会继续移动。我该如何修复它?请帮助我!!

最佳答案

您必须操纵 X 轴速度:

Vector2 vel = body.getLinearVelocity();
vel.x = 0f;
body.setLinearVelocity(vel);

这样,Y 轴速度保持不变,但你的玩家不会侧向移动。

关于java - 如何在 libGDX (Box2D) 中停止 body 的冲动和力而不是重力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38608180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com