所以我是JME3的新手,我在理解BetterCharacterControl时遇到了一些问题。
当我尝试将BetterCharacterControl应用到一个盒子时,它总是会#34;扩展"从盒子的上部而不是中心。 (图片说明更好:)
我无法找到任何更改其应用位置的函数,我已经尝试创建一个子类,我将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);
另一方面,似乎我必须为跳跃力量应用一个巨大的矢量来做任何事情(我没有改变任何重力值)
我很高兴得到任何帮助
答案 0 :(得分:0)
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)。新行添加没有意识到这种移动,将对象留在盒子组的中心位置。但是,这种解决问题的方法,在最终对象中实际使用复合网格时会产生问题。