如何防止碰撞中的两个物体穿过两者

时间:2015-02-15 01:05:37

标签: java box2d jbox2d collision

我想知道如何防止物体穿过另一个物体。我有一个球和一个方格,我可以用鼠标移动。当我的球在我的方格上时,我移动它(例如在顶部)如果我非常缓慢地将球保留在方块上,如果它没有穿过它。

1 个答案:

答案 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类将形状附加到实体上。固定装置举行   以下内容:

     
      
  • 单一形状
  •   
  • 广泛代理
  •   
  • 密度,摩擦力和恢复原状
  •   
  • 碰撞过滤标志
  •   
  • 指向父体的指针
  •   
  • 用户数据
  •   
  • 传感器标志
  •