2013-05-09 90 views
2

我正在开发一个游戏,用户必须击中高速球。为了击球,我加入了一个矩形身体,演员使用旋转关节并使其电机能够以指定的速度(电机速度)旋转。现在一切都是完美的,但有时候当球的速度很高时,它会绕过直肠体。使用碰撞列表器我发现碰撞正在发生,但碰撞后球没有被反射。因为这只有当球高速运转时才会发生,它是否碰撞到身体的密度?或者它负责它的旋转接头的电机?我在这里错过了什么?box2d中没有正确的碰撞

下面是两个机构代码为矩形体

//方法

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

回答

3

尝试使用isBullet=true财产上的球体

+0

谢谢它的工作.. – Pranav008 2013-05-09 09:58:09

1

你有没有试着用这些属性玩弄:密度,摩擦和恢复原状。

球的运动速度可能非常快,因此在撞击长方体时,球的力量对于球体的力量要高。这意味着球不能被球体阻挡,为什么它会通过它。

只是一个猜测。

+0

是的,我没试过我的水平最好的恢复原状,密度,这些机构的质量发挥,但每次失败了。如上所述,通过设置isBullet = true来解决问题。谢谢反正 – Pranav008 2013-05-09 10:01:08