我不知道我做错了什么。我收到一个SIGABRT错误,我想这与下面代码中的for循环有关。请有人帮帮我。在此先感谢。
b2BodyDef ropeBodyDef;
ropeBodyDef.linearDamping = 0.2;
ropeBodyDef.angularDamping = 0.2;
ropeBodyDef.userData = ropeSprite;
b2Body *ropeBody;
b2Body *ropeStart = starBody;
b2MassData ropeMassData;
ropeMassData.mass = 1;
ropeBody->GetMassData(&ropeMassData);
b2DistanceJointDef ropeJointDef;
b2DistanceJoint *ropeJoint;
float dY = starBody->GetPosition().y - fittingBody->GetPosition().y;
int numSections = ceil(dY/ 55);
for (float i = 0; i < numSections - 1; i++) {
// one rope section body
ropeBodyDef.position.Set(0, starBody->GetPosition().y - dY * i/numSections);
ropeMassData.mass = 0.8 + 0.8 * i / numSections;
// rope body
ropeBody = world->CreateBody(&ropeBodyDef);
ropeFixture = ropeBody->CreateFixture(&ropeShapeDef);
[ropeSegments addObject:[NSValue valueWithPointer:ropeBody]];
// one rope section to another
ropeJointDef.Initialize(ropeStart, ropeBody, ropeStart->GetPosition(), ropeBody->GetPosition());
ropeJoint = (b2DistanceJoint*)world->CreateJoint(&ropeJointDef);
ropeJoint->SetLength(dY / numSections);
// update startpoint for next joint
ropeStart = ropeBody;
}
// final rope joint
ropeJointDef.Initialize(ropeStart, ropeBody, ropeStart->GetPosition(), ropeBody->GetPosition());
ropeJoint = (b2DistanceJoint*)world->CreateJoint(&ropeJointDef); // THIS IS THE LINE THAT I GET THE SIGABRT
ropeJoint->SetLength(dY / numSections);
[ropeSegments addObject:[NSValue valueWithPointer:fittingBody]];
答案 0 :(得分:0)
您只需在下面的第一行声明ropeBody
,并且您已在其上调用方法,而无需初始化并指定其值:
b2Body *ropeBody; <-- declare here
b2Body *ropeStart = starBody;
b2MassData ropeMassData;
ropeMassData.mass = 1;
ropeBody->GetMassData(&ropeMassData); <-- uh, ropeBody is null or rubbish pointer