Java 如何防止碰撞中的两个对象相交

Java 如何防止碰撞中的两个对象相交,java,box2d,jbox2d,collision,Java,Box2d,Jbox2d,Collision,我想知道如何防止一个物体与另一个物体交叉。我有一个球和一个正方形,我可以用鼠标移动它。当我的球在我的正方形上时,我移动它(例如在顶部),如果我走得很慢,球将保持在正方形上,如果它没有穿过它。如果你的两个对象都定义了一个固定装置,它们将无法相互交叉,这是一个必须创建一个受BOX2D世界中的物理影响的动态对象的示例,而且这个物体不能穿过传感器: public Ball (World world){ this.world = world; BodyDef bod

我想知道如何防止一个物体与另一个物体交叉。我有一个球和一个正方形,我可以用鼠标移动它。当我的球在我的正方形上时,我移动它(例如在顶部),如果我走得很慢,球将保持在正方形上,如果它没有穿过它。

如果你的两个对象都定义了一个固定装置,它们将无法相互交叉,这是一个必须创建一个受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类将形状附着到实体。固定装置支撑着整个系统 以下:

  • 单一形状
  • 宽相位代理
  • 密度、摩擦和恢复
  • 冲突过滤标志
  • 返回指向父实体的指针
  • 用户数据
  • 传感器标志

当我不移动方形球时,它不工作,但如果我移动它(到顶部),它会缓慢地停留,但不会快速地停留移动:
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)上的问题