2012-08-03 56 views
2

我試圖實現焊縫我Box2D的機構: 爲什麼使用焊接接頭會使我的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很低。我認爲這是因爲我不檢查身體是否是焊接的。 我如何檢查身體是否焊接? 謝謝。

回答

0

根據您的代碼,我假設您正在嘗試使用焊接接頭連接所有接觸的物體。由於這些物體接觸,所以在將它們焊接在一起時可能會發生重疊或碰撞。但是你設置了collideConnected = true。這意味着如果他們現在正在碰撞,他們將保持碰撞,並且由於焊接接頭而不會分開。這應該會產生很多不太有意義的計算,從而拖動你的fps。

+1

您可以通過比較焊接對象前後的fps來測試是否屬於這種情況。 – 2013-02-16 14:25:55

相關問題