如何走楼梯和斜坡?

时间:2013-09-01 00:43:55

标签: java model-view-controller 3d game-physics jmonkeyengine

我们使用jme3,而BetterCharacterControl的一个问题是没有实现setMaxSlope。引擎的开发人员说我们可以使用新的控制器自己解决它:

http://hub.jmonkeyengine.org/forum/topic/setmaxslope-for-bettercharactercontrol/

我非常想要一个解决方案,因为my game需要它。之前我问过它,但我们没有解决它:

How to improve character control for my 3D game?

你能帮助我们进步吗?我录制了一个有问题的视频:

http://www.youtube.com/watch?v=PF_UzoOXD0E

有些文档在这里: http://hub.jmonkeyengine.org/wiki/doku.php/jme3:advanced:walking_character?s[]=bettercharactercontrol#bettercharactercontrol

我努力将功能添加到控制器:

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那么它很难为游戏角色移动。你能帮我们看看应该做些什么吗?

2 个答案:

答案 0 :(得分:2)

由于动作将角色视为由PhysicsRigidBody制成的PhysicsJoint,因此他的腿或膝盖可能没有足够的向上力量。希望那里的参数没有设置成适应那个楼梯大小。

由于您在导航有角度的楼梯时遇到最大麻烦,因此可能需要采取措施来调整行走方向。我怀疑你可以依靠location.equals(lastlocation),但在很短的距离内检查角色是否遇到了障碍。一旦你知道有一个步骤,你想要干净地缩放它或保持卡在下面。

答案 1 :(得分:2)

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

不确定您使用的是哪个JME,但这是该控制器的来源:

https://code.google.com/p/jbullet-jme/source/browse/branches/jbullet/src/com/bulletphysics/dynamics/character/KinematicCharacterController.java