cocos2d iphone - 如何将CCSprite从一个父母转移到另一个父母



我有一个名为spriteCCSprite,它是一个名为movingLayerCCLayer的子,它本身就是运行我的游戏逻辑的当前CCLayer的子,所以在这种情况下它是selfmovingLayer在屏幕上来回移动,永远重复动作,sprite骑在屏幕上。 我想让sprite"摆脱"movingLayer并"继续"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是多余的,但这不是问题所在。 如果我在将sprite添加到movingLayer之前将其添加到self我会因访问僵尸而崩溃,如果我尝试先将其添加到self,我会因为尝试添加已添加的内容而崩溃。

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

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

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

相关内容

最新更新