如果您的两个对象都定义了固定装置,它们将无法相互交叉,这是必须如何创建受BOX2D世界中物理影响的动态对象的示例,并且该对象不能通过传感器进行隧道传输:
public Ball (World world){
this.world = world;
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.DYNAMIC;
bodyDef.position.set(0.0f/RATE, 0.0f/RATE);
Ballbody = world.createBody(bodyDef);
CircleShape circle = new CircleShape();
radius = (int) (Math.random()*30+15);
circle.m_radius = radius/RATE;
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = circle;
fixtureDef.restitution = 0.8f;
fixtureDef.density = 2.0f;
fixtureDef.friction = 0.3f;
fixtureDef.filter.groupIndex = -1;
Ballbody.createFixture(fixtureDef);
Ballbody.getFixtureList().setUserData("Ballounaton");
Vec2 ballVec = new Vec2((float) (Math.random()*8+2),0.0f);
Ballbody.setLinearVelocity(ballVec);
}
确保为box2d动态或静态对象定义一个固定装置,以避免像以下示例中那样穿过传感器:
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = circle;
fixtureDef.restitution = 0.8f;
fixtureDef.density = 2.0f;
fixtureDef.friction = 0.3f;
fixtureDef.filter.groupIndex = -1;
Ballbody.createFixture(fixtureDef);
根据BOX2D官方文件:
回想一下,形状不知道身体,可以使用
独立于物理模拟。因此,Box2D提供了
b2Fixture类将形状附加到实体。固定装置保持
以下内容:
-
单一形状
-
宽相位代理
-
密度、摩擦和恢复
-
冲突过滤标志
-
返回父实体的指针
-
用户数据
-
传感器标志