não colisão adequada em box2d

Estou desenvolvendo um jogo no qual o usuário tem que acertar uma bola de alta velocidade. Para acertar a bola, juntei-me a um corpo retangular com o ator usando uma junta de revolução e habilitei seu motor para girá-lo com uma velocidade especificada (velocidade do motor). Agora tudo é perfeito, mas em algum momento, quando a velocidade da bola é alta, ela está contornando o corpo retangular. Usando o listener de colisão, descobri que a colisão está acontecendo, mas a bola não está sendo refletida após a colisão. Como isso está acontecendo apenas quando a bola está em alta velocidade, é a densidade de corpos que estão colidindo. Ou é o motor da junta de revolução que é responsável por isso? Estou faltando alguma coisa aqui?

Aqui está o código para os dois corpos

// método para corpo retangular

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

// método para o corpo da bola

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

questionAnswers(2)

yourAnswerToTheQuestion