我有CCSprite
名为sprite
的{{1}}名为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
是多余的,但这不是问题。如果我将sprite
从movingLayer
移除,然后再将其添加到self
我因为访问僵尸而崩溃,如果我首先尝试将其添加到self
,我会因为尝试崩溃而崩溃添加已添加的内容。
答案 0 :(得分:9)
您是否尝试将清理设置为NO?
或者,尝试在从moveLayer中删除精灵之前保留精灵,然后在完成后释放精灵:
[sprite retain];
[movingLayer removeChild:sprite cleanup:YES];
[self addChild:sprite z:1];
[sprite release];