【问题标题】:not proper collision in box2dbox2d中不正确的碰撞
【发布时间】:2013-05-09 09:07:44
【问题描述】:

我正在开发一款用户必须击打高速球的游戏。为了击球,我使用旋转关节连接了一个矩形体和演员,并启用了它的电机,以指定的速度(电机速度)旋转它。现在一切都很完美,但有时当球的速度很高时,它会绕过矩形体。使用碰撞侦听器,我发现碰撞正在发生,但球在碰撞后没有被反射。 由于这种情况仅在球处于高速状态时才会发生,因此是否与碰撞的物体密度有关。还是负责它的旋转接头电机?我在这里错过了什么吗??

这是两个主体的代码

//矩形体的方法

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;
}

【问题讨论】:

    标签: java libgdx box2d


    【解决方案1】:

    尝试在你的球体上使用isBullet=true 属性

    【讨论】:

      【解决方案2】:

      您是否尝试过使用这些属性:密度、摩擦力和恢复力。

      球可能移动得如此之快,以至于在撞击矩形体时,球的力量对于rec体来说太大了。这意味着球不能被rec体阻止,这就是它穿过它的原因。

      只是猜测。

      【讨论】:

      • 是的,我确实尽了最大的努力来处理这些物体的恢复、密度和质量,但每次都失败了。如上所述通过设置 isBullet=true 来修复问题。还是谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2012-06-10
      相关资源
      最近更新 更多