我想知道如何防止物体穿过另一个物体。我有一个球和一个方格,我可以用鼠标移动。当我的球在我的方格上时,我移动它(例如在顶部)如果我非常缓慢地将球保留在方块上,如果它没有穿过它。
答案 0 :(得分:0)
如果你的2个物体都定义了一个夹具,它们将无法相互交叉,这就是必须如何创建一个将受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); // you can set a non randum raduis
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"); // optional
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类将形状附加到实体上。固定装置举行 以下内容:
- 单一形状
- 广泛代理
- 密度,摩擦力和恢复原状
- 碰撞过滤标志
- 指向父体的指针
- 用户数据
- 传感器标志