在TouchesEnded之后更改精灵节点父节点

时间:2014-08-13 21:58:50

标签: ios sprite-kit parent-child sprite

我试图在精灵被删除后尝试更改它的父节点,但我得到一个零错误。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInNode:self];

        SKSpriteNode *gamePiece = [self pickObject];
        gamePiece.position = location;
        gamePiece.physicsBody.dynamic = NO;

        [self addChild:gamePiece];

        _currentTouch = touch;
        currentGamePiece = gamePiece;

        CGPoint touchLocation = [touch locationInNode:self.scene];

        if(touchLocation.y > 350)
        {
            _bg.position = CGPointMake(_bg.position.x, _bg.position.y-2);
        }
    }
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    /* Called when a touch begins */

    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInNode:self];

        if ([touch isEqual:_currentTouch])
        {
            currentGamePiece.position = location;
        }

        CGPoint touchLocation = [touch locationInNode:self.scene];

        if(touchLocation.y > 350)
        {
            _bg.position = CGPointMake(_bg.position.x, _bg.position.y-2);
        }
    }
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    /* Called when a touch begins */

    for (UITouch *touch in touches)
    {
        CGPoint location = [touch locationInNode:self];

        if ([touch isEqual:_currentTouch])
        {
            currentGamePiece.position = location;
            currentGamePiece.physicsBody.dynamic = YES;

            SKAction *removeNode = [SKAction removeFromParent];
            [gamePiece runAction: removeNode];

            [_bg addChild:gamePiece];
        }
    }
}

也许它与切换到" currentGamePiece"有关,但当我尝试删除" currentGamePiece"从其父级,我得到一个错误,如"尝试添加已经拥有父级的节点"。我可能不会以正确的方式去做。问题是什么?

1 个答案:

答案 0 :(得分:0)

尝试替换此代码......

        SKAction *removeNode = [SKAction removeFromParent];
        [gamePiece runAction: removeNode];

        [_bg addChild:gamePiece];

有了......

        [gamePiece removeFromParent];
        [_bg addChild:gamePiece];

问题是在SKAction有机会将其从父级中删除之前,gamePiece已添加到_gb中。应用程序崩溃是因为节点不能有两个父节点。