Java 如何走楼梯和斜坡?

Java 如何走楼梯和斜坡?,java,model-view-controller,3d,game-physics,jmonkeyengine,Java,Model View Controller,3d,Game Physics,Jmonkeyengine,我们使用jme3,BetterCharacterControl的一个问题是未实现setMaxSlope。该引擎的开发人员表示,我们可以使用新控制器自行解决此问题: package adventure; import com.jme3.math.Vector3f; import com.jme3.bullet.control.BetterCharacterControl; public class GameCharControl extends BetterCharacterControl {

我们使用jme3,BetterCharacterControl的一个问题是未实现
setMaxSlope
。该引擎的开发人员表示,我们可以使用新控制器自行解决此问题:

package adventure;

import com.jme3.math.Vector3f;
import com.jme3.bullet.control.BetterCharacterControl;

public class GameCharControl extends BetterCharacterControl {
    protected Vector3f lastlocation = new Vector3f();

    public GameCharControl(float x, float y, float z) {
        super(x, y, z);
    }

    @Override
    public void update(float tpf) {
        super.update(tpf);
        System.out.println("location " + location);
        System.out.println("lastlocation " + lastlocation);

        if (location.equals(lastlocation)) {
            System.out.println("update2");
            this.setHeightPercent(101);
        }
        rigidBody.getPhysicsLocation(location);
        applyPhysicsTransform(location, rotation);
        lastlocation = location;
    }
}

我真的想要一个解决方案,因为我需要它。我以前问过,但我们没有解决:

你能帮我们进步吗?我已录制了一段视频,其中包含以下问题:

以下是一些文档:

我向控制器添加功能的努力:

package adventure;

import com.jme3.math.Vector3f;
import com.jme3.bullet.control.BetterCharacterControl;

public class GameCharControl extends BetterCharacterControl {
    protected Vector3f lastlocation = new Vector3f();

    public GameCharControl(float x, float y, float z) {
        super(x, y, z);
    }

    @Override
    public void update(float tpf) {
        super.update(tpf);
        System.out.println("location " + location);
        System.out.println("lastlocation " + lastlocation);

        if (location.equals(lastlocation)) {
            System.out.println("update2");
            this.setHeightPercent(101);
        }
        rigidBody.getPhysicsLocation(location);
        applyPhysicsTransform(location, rotation);
        lastlocation = location;
    }
}

但是上面没有做任何改变,或者如果我将高度设置为101,那么游戏角色就很难移动。你能帮我们看看应该怎么做吗?

由于动作将角色视为由
物理关节
构成的
物理刚体
,因此他的腿或膝盖可能没有足够的向上运动力。希望那里的参数没有设置为适应楼梯的大小


由于在有角度的楼梯上导航时遇到的问题最多,因此第二个措施可能是调整行走方向。我怀疑你能否依赖于
location.equals(lastlocation)
,但在短距离内可以很好地检查角色是否遇到障碍。一旦你知道有一个步骤,你想清楚地缩放它或保持在下面。

为什么不使用已实现setMaxSlope的KinematicCharacterController

不确定您正在使用哪个JME,但以下是该控制器的源代码:

package adventure;

import com.jme3.math.Vector3f;
import com.jme3.bullet.control.BetterCharacterControl;

public class GameCharControl extends BetterCharacterControl {
    protected Vector3f lastlocation = new Vector3f();

    public GameCharControl(float x, float y, float z) {
        super(x, y, z);
    }

    @Override
    public void update(float tpf) {
        super.update(tpf);
        System.out.println("location " + location);
        System.out.println("lastlocation " + lastlocation);

        if (location.equals(lastlocation)) {
            System.out.println("update2");
            this.setHeightPercent(101);
        }
        rigidBody.getPhysicsLocation(location);
        applyPhysicsTransform(location, rotation);
        lastlocation = location;
    }
}

好吧,我在这方面没有经验,但也许我的简单设想会有所帮助,我建议从边缘向下设置一个斜坡,这样看起来他就不会在楼梯上跳了。为了做到这一点,你必须知道附近是否有一个更大半径的楼梯。我不确定,但我认为它可能太旧了,不推荐使用。jme3开发人员在论坛上说,我们应该开发更好的CharacterControl,并在其中添加setMaxSlope方法,但这很难。你可能是对的,反正我无法让KCC在我的游戏中工作。。。可能是我,也可能是代码有缺陷。我只是放弃了尝试使用它,自己做了碰撞检测(幸运的是我的游戏很“简单”,这是合理的)。