2 Stimmen

Warum verlangsamt die Verwendung von Schweißverbindungen mein Box2D-Programm?

Ich versuche, Schweißnähte für meine Box2D-Körper zu implementieren:

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);
    //}
}

aber meine fps sind sehr niedrig. Ich denke, dass es daran liegt, dass ich nicht überprüfe, dass die Körper diejenigen sind, die geschweißt werden sollen. Wie kann ich überprüfen, ob die Körper verbunden sind? Vielen Dank.

0voto

Xiaomeng Ye Punkte 11

Basierend auf Ihrem Code gehe ich davon aus, dass Sie versuchen, alle Objekte im Kontakt mit Schweißverbindungen zu verbinden. Da diese Objekte in Kontakt sind, kann es passieren, dass sie sich überschneiden oder kollidieren, wenn Sie sie miteinander verschweißen. Sie haben jedoch collideConnected = true gesetzt. Das bedeutet, dass sie, wenn sie sich derzeit berühren, weiterhin zusammenstoßen werden und nicht voneinander entfernt werden können aufgrund der Schweißverbindung. Dies sollte zu einer Menge nicht so sinnvoller Berechnungen führen und somit Ihre Bildwiederholrate beeinträchtigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X