2

box2d ボディに溶接ジョイントを実装しようとしています。

for(pos = _contactListener->_contacts.begin(); 
    pos != _contactListener->_contacts.end(); ++pos) {
    MyContact contact = *pos;


    b2Body *bodyA = contact.fixtureA->GetBody();
    b2Body *bodyB = contact.fixtureB->GetBody();

    b2Vec2 worldCoordsAnchorPoint = bodyA->GetWorldPoint (b2Vec2(0,0)); 
    b2WeldJointDef weldJointDef;
    weldJointDef.bodyA = bodyA;
    weldJointDef.bodyB = bodyB;

    weldJointDef.localAnchorA = weldJointDef.bodyA->GetLocalPoint(worldCoordsAnchorPoint);
    weldJointDef.localAnchorB = weldJointDef.bodyB->GetLocalPoint(worldCoordsAnchorPoint);
    weldJointDef.referenceAngle = weldJointDef.bodyB->GetAngle() - weldJointDef.bodyA->GetAngle();
    weldJointDef.collideConnected = true;
    weldJointDef.userData = @"tile";

    weldJointDef.Initialize(bodyA, bodyB, worldCoordsAnchorPoint);
    world->CreateJoint(&weldJointDef);
    //}
}

しかし、私のfpsは非常に低いです。体が溶接するものであることを確認していないからだと思います。ボディが溶接されていることを確認するにはどうすればよいですか? ありがとう。

4

1 に答える 1

0

コードに基づいて、溶接ジョイントを使用してすべてのオブジェクトを接触させようとしていると思います。これらのオブジェクトは接触しているため、それらを溶接するとオーバーラップまたは衝突が発生する可能性があります。ただし、collideConnected = true を設定します。つまり、現在衝突している場合、衝突が続き、溶接ジョイントのために離れることはありません。これにより、あまり意味のない計算が大量に発生するため、fps が低下します。

于 2013-02-16T14:23:31.240 に答える