Box2D静体碰撞性能问题

时间:2012-12-20 19:23:35

标签: java performance box2d physics jbox2d

我正在使用JBox2d在我正在进行的游戏项目中执行碰撞检测。 我用静态物体代表世界上的障碍。每当动态体(即游戏角色)与这些障碍物中的一个碰撞时,性能就会明显下降。 Fps将从~120降至~5。当静态物体的角落碰撞时,这似乎更频繁地发生。

当我将世界障碍物的身体类型设置为动态而不是静态时,具有非常高的密度(以防止身体在碰撞时移动),此问题消失...此解决方案不适合然而我的情况......

关于什么可能导致这个巨大的fps下降的任何想法?

这是我用来创建静态实体的代码:

BodyDef def = new BodyDef();
        def.type = BodyType.STATIC; // If this line is commented and the other     
                               //commented lines are uncommented, the issue goes away.
        //def.type = BodyType.DYNAMIC;
        def.position.set(worldBounds.getCenterX(), worldBounds.getCenterY());
        Body staticBody = b2World.createBody(def);

        PolygonShape box = new PolygonShape();
        box.setAsBox(worldBounds.getWidth() * 0.5f, worldBounds.getHeight() * 0.5f);

        FixtureDef fixture = new FixtureDef();
        fixture.shape = box;
        fixture.friction = 0.3f;
        //fixture.density = 1000000000;
        staticBody.createFixture(fixture);
        //staticBody.setSleepingAllowed(true);
        //staticBody.setFixedRotation(true);

我尝试过使用CircleShape而不是PolygonShape,但这对任何事都没有帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是游戏的代码,我现在正在努力工作。希望如果你复制和粘贴,更改一些变量名称和东西,它可能会排序你的问题。我是box2d的新手,所以无法准确地告诉你问题所在。希望它有所帮助。

    //bodydef
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.StaticBody;
    bodyDef.position.set(position);
    body = world.createBody(bodyDef);

    //shape
    PolygonShape shape = new PolygonShape();
    shape.setAsBox(dimension.x / 2, dimension.y / 2);

    //fixture
    FixtureDef fixture = new FixtureDef();
    fixture.friction = 0.3f;
    fixture.shape = shape;

    body.createFixture(fixture);
    shape.dispose();