我正在使用Libgdx的box2d端口。我正在创建边缘形状,但在与其他多边形碰撞时不会旋转。为什么是这样?

这是我设置边缘形状的代码。

float x = 3;
float y = 10;
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set(x, y);

Body body = this.world.createBody(bodyDef);
MassData massdata = new MassData();
massdata.center.set(1,1);
massdata.mass = 10;
body.setMassData(massdata);

FixtureDef fixtureDef = new FixtureDef();
EdgeShape shape = new EdgeShape();
shape.set(0, 0, 2, 2);
fixtureDef.shape= shape;
fixtureDef.friction = 1;
fixtureDef.restitution = .5f;
fixtureDef.density = 10;
body.createFixture(fixtureDef);

最佳答案

那是因为Box2D中的Edge Shape是用来创建静态场景的。由于动态,它根本无法移动。我想运动学会起作用。这是逻辑,因为EdgeShape没有质量,因为它没有表面(如果您将2D世界视为具有固定深度的3D,则它没有体积)。

这是摘录自手册,摘录了我最初的想法:


  边缘形状是线段。提供这些是为了帮助制作
  一个自由形式的静态游戏环境。主要限制
  边缘形状是它们可以与圆形和多边形碰撞,但不能
  与自己。 Box2D使用的碰撞算法要求
  两个碰撞形状中的至少一个具有体积。边缘形状没有
  体积,所以边缘边缘碰撞是不可能的。

10-02 04:35