Cocos2d iphone 如何将CCSprite从一个父级传输到另一个父级?

Cocos2d iphone 如何将CCSprite从一个父级传输到另一个父级?,cocos2d-iphone,ccsprite,cclayer,Cocos2d Iphone,Ccsprite,Cclayer,我有一个CCSprite名为sprite,它是CCLayer名为movingLayer的子元素,它本身就是运行我的游戏逻辑的当前CCLayer的子元素,所以在这种情况下它是selfmovingLayer在屏幕上来回移动,动作永远重复,sprite骑在上面。我想让sprite从movingLayer中“下车”并“上车”到self,在那里它可以自己做一些动作 当我尝试这样做时,我需要告诉movingLayer删除sprite和self添加sprite。这就是我所做的 - (void)attack:(

我有一个
CCSprite
名为
sprite
,它是
CCLayer
名为
movingLayer
的子元素,它本身就是运行我的游戏逻辑的当前
CCLayer
的子元素,所以在这种情况下它是
self
movingLayer
在屏幕上来回移动,动作永远重复,
sprite
骑在上面。我想让
sprite
movingLayer
中“下车”并“上车”到
self
,在那里它可以自己做一些动作

当我尝试这样做时,我需要告诉
movingLayer
删除
sprite
self
添加
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
是多余的,但这不是问题所在。如果我在添加到
self
之前从
movingLayer
中删除
sprite
,我会因为访问僵尸而崩溃,如果我尝试先将其添加到
self
中,我会因为尝试添加已添加的内容而崩溃。

您尝试过将清除设置为否吗

或者,在从movingLayer中删除sprite之前,尝试保留它,然后在完成后释放它:

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