我有一个问题: 我正在使用Box2D编写一个平铺地图游戏,但问题是,如果我按下例如D继续我的角色,向量2会让我越来越快,所以我这样做了:
if (Gdx.input.isKeyJustPressed(Input.Keys.W) && player.b2body.getLinearVelocity().y == 0)
player.b2body.applyLinearImpulse(new Vector2(0, 4f), player.b2body.getWorldCenter(), true);
if (Gdx.input.isKeyPressed(Input.Keys.D))
player.b2body.applyLinearImpulse(new Vector2(0.1f, 0), player.b2body.getWorldCenter(), true);
if (Gdx.input.isKeyPressed(Input.Keys.A))
player.b2body.applyLinearImpulse(new Vector2(-0.1f, 0), player.b2body.getWorldCenter(), true);
if (player.b2body.getLinearVelocity().x > 2) {
player.b2body.setLinearVelocity(2, player.b2body.getLinearVelocity().y);
}
else if (player.b2body.getLinearVelocity().x < -2) {
player.b2body.setLinearVelocity(-2, player.b2body.getLinearVelocity().y);
}
因此玩家的最高速度为2。 但当他击中地面时,他会慢下半秒钟,因为他在空中紧固。我怎么解决这个问题?
我的第二个任务是: 当我跳到goround后我跳起并再次按下跳跃时,角色不会跳! 为什么以及如何解决这个问题?
希望你能帮助我,并提前致谢!
答案 0 :(得分:1)
但是当他击中地面时,他的速度会慢一半左右 因为他紧紧抓住了。我怎么解决这个问题?
我认为这是因为摩擦,尝试在创建身体时将BodyDef中的摩擦设置为零
当我撞到地面后,当我跳起并再次按下跳跃时 性格不跳!为什么以及如何解决这个问题?
我建议你这样做:
if (Gdx.input.isKeyJustPressed(Input.Keys.W) && isPlayerOnGround)
player.b2body.applyLinearImpulse(new Vector2(0, 4f), player.b2body.getPosition(), true);
使用世界联系我们检测玩家是否在地上
world.setContactListener(new () {
@Override
public void endContact(Contact c) {
Fixture fa = c.getFixtureA();
Fixture fb = c.getFixtureB();
/* end Contact
* <<Player>> <---> <<Gound>>
*/
if(fa.getUserData() !=null && fb.getUserData() !=null &&
((fa.getUserData().equals(playerUserData) && fb.getUserData().equals(groundUserData)) ||
fb.getUserData().equals(playerUserData) && fa.getUserData().equals(groundUserData)))
{
isPlayerOnGround = false;
}
}
@Override
public void beginContact(Contact c) {
Fixture fa = c.getFixtureA();
Fixture fb = c.getFixtureB();
/* Begin Contact
* * <<Player>> <---> <<Gound>>
*/
if(fa.getUserData() !=null && fb.getUserData() !=null &&
((fa.getUserData().equals(playerUserData) && fb.getUserData().equals(groundUserData)) ||
fb.getUserData().equals(playerUserData) && fa.getUserData().equals(groundUserData)))
{
isPlayerOnGround = true;
}
}
});
希望这是明确和有用的:=)
答案 1 :(得分:0)
这是您可以将 userData 添加到正文
的方法... // Define your bodyDef
Body body = world.createBody(bodyDef);
... // Define your fixtureDef
Fixture fixture = body.createFixture(fixtureDef);
String userData ="MyBody";
fixture.setUserData(userData);
当您将灯具定义放入您的身体时,您可以获得灯具 只需将userdata(唯一字符串ex:&#34; mybody&#34;)放入灯具
即可PS:如果需要,可以将相同的userData放到许多实体(一组实体)中。