Java box2d中的不正确碰撞

Java box2d中的不正确碰撞,java,libgdx,box2d,Java,Libgdx,Box2d,我正在开发一个游戏,用户必须打一个高速球。为了击球,我使用旋转关节将一个长方形物体与演员连接起来,并启用其电机,以指定的速度(电机速度)旋转。现在一切都很完美,但有时当球的速度很高时,它会绕过直肠体。使用碰撞列表器,我发现碰撞正在发生,但碰撞后球并没有被反射。 由于这只发生在球处于高速时,所以碰撞物体的密度是bcoz。或者是负责它的旋转关节的马达??我是不是遗漏了什么 这是两个机构的代码 //矩形体法 public Body createRectangleBodyPart(float x, fl

我正在开发一个游戏,用户必须打一个高速球。为了击球,我使用旋转关节将一个长方形物体与演员连接起来,并启用其电机,以指定的速度(电机速度)旋转。现在一切都很完美,但有时当球的速度很高时,它会绕过直肠体。使用碰撞列表器,我发现碰撞正在发生,但碰撞后球并没有被反射。 由于这只发生在球处于高速时,所以碰撞物体的密度是bcoz。或者是负责它的旋转关节的马达??我是不是遗漏了什么

这是两个机构的代码

//矩形体法

public Body createRectangleBodyPart(float x, float y, float width,
        float height, short groupIndex) {
    PolygonShape shape = new PolygonShape();
    shape.setAsBox(width*WORLD_TO_BOX, height*WORLD_TO_BOX);
    MassData massData = new MassData();
    massData.mass = 15;
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.KinematicBody;
    bodyDef.position.y = y*WORLD_TO_BOX;
    bodyDef.position.x = x*WORLD_TO_BOX;
     body = world.createBody(bodyDef);
    body.setMassData(massData);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = shape;
    fixtureDef.density = 1;
    fixtureDef.friction = 100f;
    fixtureDef.restitution = 0.5f;
    fixtureDef.filter.groupIndex=groupIndex;
    body.createFixture(fixtureDef);
    shape.dispose();
    return body;
}
//球体成形方法

    public Body createRoundBodyPart2(float x, float y, float radius,
        short groupIndex, float density, int mass) {

    CircleShape shape = new CircleShape();
    shape.setPosition(new Vector2(0, 0));
    shape.setRadius(radius*WORLD_TO_BOX ); // *18
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.DynamicBody;
    bodyDef.position.y = y*WORLD_TO_BOX;
    bodyDef.position.x = x*WORLD_TO_BOX;
    MassData massData = new MassData();
    massData.mass = 8;
    Body body = world.createBody(bodyDef);
    body.setMassData(massData);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = shape;
    fixtureDef.density = 0.5f;
    fixtureDef.restitution=0.007f;
    fixtureDef.filter.groupIndex = groupIndex;
    body.createFixture(fixtureDef);
    shape.dispose();
    return body;
}

你有没有试过利用这些特性:密度、摩擦力和恢复力

球可能移动得太快,以至于在与长方形物体碰撞时,球的力对rec物体来说太大。这意味着rec主体无法阻止球,这就是它通过rec主体的原因


只是一个猜测。

你有没有尝试过利用这些特性:密度、摩擦力和恢复力

球可能移动得太快,以至于在与长方形物体碰撞时,球的力对rec物体来说太大。这意味着rec主体无法阻止球,这就是它通过rec主体的原因


只是一个猜测。

试着在你的球身上使用
isBullet=true
属性

试着在你的球身上使用
isBullet=true
属性

是的,我尽了我最大的努力来处理这些身体的恢复、密度和质量,但每次都失败了。通过如上所述设置isBullet=true修复了该问题。不管怎样,谢谢你。我尽了我最大的努力去恢复这些身体的密度和质量,但每次都失败了。通过如上所述设置isBullet=true修复了该问题。谢谢你
    public Body createRoundBodyPart2(float x, float y, float radius,
        short groupIndex, float density, int mass) {

    CircleShape shape = new CircleShape();
    shape.setPosition(new Vector2(0, 0));
    shape.setRadius(radius*WORLD_TO_BOX ); // *18
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.DynamicBody;
    bodyDef.position.y = y*WORLD_TO_BOX;
    bodyDef.position.x = x*WORLD_TO_BOX;
    MassData massData = new MassData();
    massData.mass = 8;
    Body body = world.createBody(bodyDef);
    body.setMassData(massData);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = shape;
    fixtureDef.density = 0.5f;
    fixtureDef.restitution=0.007f;
    fixtureDef.filter.groupIndex = groupIndex;
    body.createFixture(fixtureDef);
    shape.dispose();
    return body;
}