решение ошибки SIGABRT в коде cocos2d - PullRequest
0 голосов
/ 22 марта 2012

Я не знаю, что я сделал неправильно.Я получаю ошибку 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 голосов
/ 22 марта 2012

Вы просто объявляете ropeBody в первой строке ниже и уже вызываете для него метод без инициализации и присвоения его значения:

b2Body *ropeBody; <-- declare here
b2Body *ropeStart = starBody;
b2MassData ropeMassData;
ropeMassData.mass = 1;
ropeBody->GetMassData(&ropeMassData); <-- uh, ropeBody is null or rubbish pointer
...