Cocos2d iphone cocos2d码中SIGABRT错误的解决
我不知道我做错了什么。我得到了一个SIGABRT错误,我想这与下面代码中的for循环有关。谁能帮我一下吗。提前谢谢Cocos2d iphone cocos2d码中SIGABRT错误的解决,cocos2d-iphone,physics,sigabrt,box2d-iphone,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;
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]];
您只需将ropeBody声明为下面的第一行,并且已经在其上调用了一个方法,而没有初始化和指定其值:
b2Body *ropeBody; <-- declare here
b2Body *ropeStart = starBody;
b2MassData ropeMassData;
ropeMassData.mass = 1;
ropeBody->GetMassData(&ropeMassData); <-- uh, ropeBody is null or rubbish pointer
请看一看以透视事物什么事物?什么观点?如果你想要更好的透视图,你应该只指出哪一行导致了错误。在完整的代码中,我声明了包括ropeBody在内的所有实体。变量声明不同于实例化。先查一查,理解一下意思。声明它并不意味着它已经有了值。假设您声明了一个b2Body*b。。然后突然你想做b->GetPosition你会得到什么?如果不是运行时错误,就会得到垃圾,因为b不是有效的b2Body。您需要实例化它:b=world->CreateBody。。这是我在你的代码中没有看到的。好的,我明白了,谢谢。我已经进行了更正,但仍然会出现一个SIGABRT错误,指向ropeJoint=b2DistanceJoint*world->CreateJoint&ropeJointDef;在for循环之后