0

スプライトを動かしているマウスジョイントが解放されたとき(スプライトがまだ動いている場合でも)にスプライトの正確な位置を取得して表示しようとしています。私はCocos2dとBox2dを使用しています。以下は、コードccTouchesEndedメソッドです。

ccTouchesEnded:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

if (mouseJoint)
{
    b2Fixture *fixture;
    CCSprite *mySprite = (CCSprite *) fixture->GetUserData();
    NSInteger attachedSprite = mySprite.tag;
    if (attachedSprite == 1) {
        CGPoint spritePosition = mySprite.position;

        CCLOG(@"the sprite position is x:%0.2f, y:%0.2f", spritePosition.x, spritePosition.y);
        }
    world->DestroyJoint(mouseJoint);
    mouseJoint = NULL;
}
}

次の行を指すEXC_BAD_ACCESSエラーが発生し続けます。

CCSprite *mySprite = (CCSprite *) fixture->GetUserData();

何が悪いのかよくわかりません。助けてください。

4

1 に答える 1

1

フィクスチャが初期化されていないため、このエラーが発生しています。このチュートリアルをチェックして ください。彼がすべてのワールド要素をループする方法

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {
    if (b->GetUserData() != NULL) {
        CCSprite *curSprite = (CCSprite *)b->GetUserData();
...
    }
}

GetUserData() を実行する前に、フィクスチャに何かを割り当てる必要があります

于 2012-08-08T20:59:03.877 に答える