如何将CCSprite从一个父级转移到另一个父级?

时间:2011-07-16 22:18:06

标签: cocos2d-iphone ccsprite cclayer

我有CCSprite名为sprite的{​​{1}}名为CCLayer的孩子,该movingLayer本身就是当前CCLayer运行游戏的孩子逻辑,所以在这种情况下它是selfmovingLayer在屏幕上来回移动,重复永久动作,sprite正在沿着它行进。我希望spritemovingLayer“离开”并“继续”到self,在那里它可以做一些自己的行动。

当我尝试这样做时,我需要告诉movingLayer删除spriteself以添加sprite.这就是我所做的......

- (void)attack:(id)sender
{
    [sprite stopAllActions];
    [movingLayer removeChild:sprite cleanup:YES];
    [self addChild:sprite z:1];
    CGFloat distance = ccpDistance(sprite.position, ccp(sprite.position.x, -sprite.contentSize.height/2));
    id goDown = [CCMoveTo actionWithDuration:distance/moveDuration position:ccp(sprite.position.x, -sprite.contentSize.height/2)];
    id repeatDown = [CCRepeatForever actionWithAction:[CCSequence actions:[CCMoveTo actionWithDuration:0 position:ccp(sprite.position.x, sprite.contentSize.height/2+self.contentSize.height)], [CCMoveTo actionWithDuration:moveDuration position:ccp(sprite.position.x, -sprite.contentSize.height/2)], nil]];
    id attackAction = [CCSequence actions:goDown, repeatDown, nil];
    [sprite runAction:attackAction];
}

我认为stopAllActions是多余的,但这不是问题。如果我将spritemovingLayer移除,然后再将其添加到self我因为访问僵尸而崩溃,如果我首先尝试将其添加到self,我会因为尝试崩溃而崩溃添加已添加的内容。

1 个答案:

答案 0 :(得分:9)

您是否尝试将清理设置为NO?

或者,尝试在从moveLayer中删除精灵之前保留精灵,然后在完成后释放精灵:

[sprite retain];
[movingLayer removeChild:sprite cleanup:YES];
[self addChild:sprite z:1];
[sprite release];