4

私が取り組んでいるゲーム プロジェクトで JBox2d を使用して衝突検出を実行しています。世界の障害物を静止体で表現しています。ダイナミック ボディ (ゲーム キャラクタなど) がこれらの障害物の 1 つに衝突すると、パフォーマンスが著しく低下します。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);

PolygonShape の代わりに CircleShape を使用してみましたが、何の役にも立ちません。

ありがとうございました!

4

1 に答える 1

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();
于 2013-01-18T02:03:44.307 に答える