gpt4 book ai didi

java - BetterCharacterControl 未在正确的位置应用 RigidBody

转载 作者:太空宇宙 更新时间:2023-11-04 14:51:48 25 4
gpt4 key购买 nike

我是 JME3 新手,在理解 BetterCharacterControl 时遇到一些问题。

当我尝试将 BetterCharacterControl 应用于框时,它总是从框的上部而不是中心“扩展”。 (一张图片可以更好地解释这一点:)

The Problem

我找不到任何函数来更改它应用的位置,我已经尝试创建一个子类,在其中直接将 RigidBody 更改为 BoxCollisionShape,但这似乎以某种方式搞砸了 isOnGround 方法。另外,如果我想稍后使用斜坡,那么胶囊形状会很好。

Box box2 = new Box(10, 15, 10);
player = new Geometry("Player", box2);
player.setLocalTranslation(new Vector3f(0, 20, 0));
Material mat = new Material(assetManager,
"Common/MatDefs/Light/Lighting.j3md");
mat.setBoolean("UseMaterialColors", true);
mat.setColor("Ambient", ColorRGBA.Blue);
mat.setColor("Diffuse", ColorRGBA.Blue);
player.setMaterial(mat);

playerC = new BetterCharacterControl(12, 30, 0);
playerC.setJumpForce(new Vector3f(0, 700, 0));
player.addControl(playerC);

rootNode.attachChild(player);

bulletAppState.getPhysicsSpace().add(playerC);

换句话说,似乎我必须为跳跃力应用一个巨大的 vector 才能做任何事情(我没有改变任何重力值)

我很高兴能得到任何帮助

最佳答案

我也遇到了同样的问题。我解决这个问题的方式并不常见。我编写了一个类并继承了 BetterCharacterControl 并覆盖了 getShape() 方法,如下所示:

protected CollisionShape getShape() {
//TODO: cleanup size mess..
CapsuleCollisionShape capsuleCollisionShape = new CapsuleCollisionShape(getFinalRadius(), (getFinalHeight() - (2 * getFinalRadius())));
CompoundCollisionShape compoundCollisionShape = new CompoundCollisionShape();
//Vector3f addLocation = new Vector3f(0, (getFinalHeight() / 2.0f), 0); REMOVED LINE
Vector3f addLocation = new Vector3f(0, 0, 0); //NEW LINE
compoundCollisionShape.addChildShape(capsuleCollisionShape, addLocation);
return compoundCollisionShape;
}

这是可行的,因为原始代码是以这样的方式创建的组合,以便子节点偏移值:(getFinalHeight ()/2.0f)。添加的新行并未实现此移动,而是将对象保留在框集的中心位置。但是,这种解决问题的方法在最终对象中实际使用复合网格时可能会产生问题。

关于java - BetterCharacterControl 未在正确的位置应用 RigidBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23677412/

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