Java 如何防止碰撞中的两个对象相交
我想知道如何防止一个物体与另一个物体交叉。我有一个球和一个正方形,我可以用鼠标移动它。当我的球在我的正方形上时,我移动它(例如在顶部),如果我走得很慢,球将保持在正方形上,如果它没有穿过它。如果你的两个对象都定义了一个固定装置,它们将无法相互交叉,这是一个必须创建一个受BOX2D世界中的物理影响的动态对象的示例,而且这个物体不能穿过传感器:Java 如何防止碰撞中的两个对象相交,java,box2d,jbox2d,collision,Java,Box2d,Jbox2d,Collision,我想知道如何防止一个物体与另一个物体交叉。我有一个球和一个正方形,我可以用鼠标移动它。当我的球在我的正方形上时,我移动它(例如在顶部),如果我走得很慢,球将保持在正方形上,如果它没有穿过它。如果你的两个对象都定义了一个固定装置,它们将无法相互交叉,这是一个必须创建一个受BOX2D世界中的物理影响的动态对象的示例,而且这个物体不能穿过传感器: public Ball (World world){ this.world = world; BodyDef bod
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类将形状附着到实体。固定装置支撑着整个系统
以下:
- 单一形状
- 宽相位代理
- 密度、摩擦和恢复
- 冲突过滤标志
- 返回指向父实体的指针
- 用户数据
- 传感器标志
当我不移动方形球时,它不工作,但如果我移动它(到顶部),它会缓慢地停留,但不会快速地停留移动:
if(body.getUserData().getClass()=square.class){if(Mouse.isButtonDown(0)){System.out.println(“确定”);Vec2 mousePosition=new Vec2(Mouse.getX(),Mouse.getY()).mul(0.5f).mul(1/3f);PhysicalObject newPhysicalObject=new Square(world,mousePosition.x,mousePosition.y);physicalObjects.set(index,newPhysicalObject);world.destroyBody(object.getBody());}
将代码添加到你的问题中,请不要在这里,并格式化!!提供了一个指向管理主体创建的类的链接,我可以看到你是如何实现它们的!!我修复了我的world step方法(60hz)上的问题