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 回答