解决cocos2d代码中的SIGABRT错误

时间:2012-03-22 11:51:23

标签: cocos2d-iphone physics sigabrt box2d-iphone

我不知道我做错了什么。我收到一个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]];

1 个答案:

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