box2d body setLinearImpulse()函数稳定

时间:2013-12-09 09:34:30

标签: android box2d andengine game-physics

我正在开发Andengine for Android的游戏。 游戏:有一个身体(让我们说小盒子)。而且我想:玩家与它发生碰撞,玩家会跳起来。它在每次碰撞中跳跃但没有跳到相同的高度(在我的代码100px中)!我的代码在这里:

if (footFake.collidesWith(this))
{  

     player.getBody().applyLinearImpulse(new Vector2(0, 100/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT), player.getBody().getWorldCenter());

}

箱体特征:

final FixtureDef fixtureDef = PhysicsFactory.createFixtureDef(0, 0, 0);
this.body = PhysicsFactory.createBoxBody(this.mPhysicsWorld, this, BodyType.StaticBody, fixtureDef);
this.body.setUserData("jumpBox");
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(this, this.body, true, true)); 

玩家:

final FixtureDef fixtureDef = PhysicsFactory.createFixtureDef(0, 0, 0.1f);
this.body = PhysicsFactory.createBoxBody(this.mPhysicsWorld, this, BodyType.DynamicBody, fixtureDef);

2 个答案:

答案 0 :(得分:0)

不是使用冲动,而是可以逐渐将身体转换到你想要的高度。

在你的情况下,身体不会在同一高度跳跃,因为身体碰撞时会施加很多力。一段时间的力量值是相同的,有些时间是不同的。

答案 1 :(得分:0)

施加冲动并不总是会产生相同的高度跳跃,因为身体的现有速度可能不同。您可以使用SetLinearVelocity来设置主体的垂直速度,以确保每次的起始速度都是恒定的。

当然,就像辛哈克所说的那样,你也应该确保身体上没有任何其他影响(如碰撞),这会影响你想要的速度。