gpt4 book ai didi

java - 如何在 libgdx 中保持相同的跳跃高度

转载 作者:行者123 更新时间:2023-11-30 09:00:21 25 4
gpt4 key购买 nike

我正在使用 libgdx 开发 2D 视频游戏。当我尝试制作跳跃的 body 时遇到了问题。让它向右移动后没有按预期跳跃。(我只能向右移动或跳跃)

如果 body 在向右移动之前跳跃,则一切正常。但是,如果我决定在将 body 向右移动后进行跳跃。 body 不再跳到相同的高度(它跳得不那么高)。我不明白为什么..

我跳 body 的方法:

    if (player.isPlayerOnGround()) {
body.applyForceToCenter(0, 200, true);
}

我的 body 向右移动的方法

    if (player.isPlayerOnGround()) {
body.setLinearDamping(0f);
body.setLinearVelocity(1f,0f);
isMoving = true;
}

我阻止 body 向右移动的方法:

    body.setLinearDamping(5f);
isMoving = false;

世界使用 -9.81f 重力和 body 1f 作为质量。

P.S:抱歉我的英语不好,这不是我的母语。

谢谢。

最佳答案

第一件事:永远不要用力跳跃。根据力作用的时间长短,力会产生不同的效果。第二:不要使用linearDamping。它使您的物理学变得飘忽不定。您可以在跳跃方法中使用冲量而不是力(实际上效果不佳)。我正在使用这种方法并且效果很好

    public void jump() {
if (jumpDelta >= Constants.PLAYER_JUMP_RATE) {
grounded = level.getContactListener().numFootContacts > 0;
if (grounded) {
body.setLinearVelocity(body.getLinearVelocity().x, 7);
jumpDelta = 0;
}
}
}

if (jumpDelta >= Constants.PLAYER_JUMP_RATE) 防止跳跃过快(比如一次跳跃两次或多次),grounded = level.getContactListener().numFootContacts > 0; 检查玩家是否在平台上,最后这个 body.setLinearVelocity(body.getLinearVelocity().x, 7); 改变 body 的垂直速度。改变速度比施加脉冲效果更好,因为脉冲不会设置速度,它会增加速度。因此,如果玩家以 -3 m/s 的垂直速度向下移动,那么它的速度将变为 4,而不是我们想要的 7。

附言我使用这种方法代替线性阻尼

    public void stopMoving() {
if (grounded) {
if (Math.abs(body.getLinearVelocity().x) <= 0.5f)
body.setLinearVelocity(0, body.getLinearVelocity().y);
else
body.applyLinearImpulse(-direction * 0.5f, 0,
body.getPosition().x, body.getPosition().y, true);
} else if (Math.abs(body.getLinearVelocity().x) <= 0.1f)
body.setLinearVelocity(0, body.getLinearVelocity().y);
else
body.applyLinearImpulse(-direction * 0.1f, 0, body.getPosition().x,
body.getPosition().y, true);
}

这个方法看似复杂,其实很简单。第一部分处理 body 在地面上的运动,第二部分处理 body 在空中的运动。 if 语句防止在停止时改变 body 的方向,如果 body 向右移动,direction 变量可以为 1,如果 body 向左移动,则为 -1,如果 body 不移动,则为 0。

关于java - 如何在 libgdx 中保持相同的跳跃高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831389/

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