我目前正在开发一款Android游戏,并希望通过加快整体运动(只是跳跃)来增加游戏玩法。我发现box2d的重力增加了很好的加速度,所以想保留它。增加重力应该可以帮助我加快跳跃速度。但是我如何计算相应的x和y速度,以便保持跳跃的高度和距离,所以它保持不变。 我找到了两个不同的公式来计算这样的东西,但仍然存在一些问题。 第一个是:
g*h*m = v
这可以用来预防身高。
v = (sqrt(d) * sqrt(g)) / sqrt(sin(2*angle))
其中d
是距离,因此可以使用保留距离。两者的问题在于,因为引力类似于(0, 8)
,所以x值永远不会有意义。是否有一些简单的方法来结合两种方法,或只是我没有找到的另一个公式?我也是完全新的想法。非常感谢!
答案 0 :(得分:1)
感谢您的两个答案,但这并不是我想要的。我得到了这样的解决方法:
double velocity = (Math.sqrt(Entity.distance) * Math.sqrt(Math.abs(this.physicsWorld.getGravity().y))) / Math.sqrt(Math.sin(2*Entity.angle));
Entity.MAX_VELOCITY_X = (float) (velocity * Math.cos(Entity.angle));
Entity.MAX_VELOCITY_Y = (float) (velocity * Math.sin(Entity.angle));
我把它放在实体的Update方法中,其中distance是我希望实体移动的距离。速度和角度是极坐标的值。
答案 1 :(得分:0)
在onManageUpdate()方法中,您可以尝试这种方式 -
vel = playerBody.getLinearVelocity();
if (vel.y < MAX_VELOCITY) {
playerBody.applyLinearImpulse(0, SPEED_JUMP, playerBody.getWorldCenter().x, playerBody.getWorldCenter().y);
}
并且只更改SPEED_JUMP以加快跳跃速度。
答案 2 :(得分:0)
这可能有所帮助:http://www.iforce2d.net/b2dtut/projected-trajectory请参阅标题为“启动到达所需高度的速度有多快?”一节。
覆盖的水平距离只是速度的水平部分乘以跳跃所需的时间。因此,如果你增加重力以使跳跃花费一半的时间,你需要两倍的水平速度来保持跳跃的侧向距离。