I have a
sprite that is a child of a
movingLayer that is itself a child of the current
CCLayer running my game logic, so it is
self in this case.
movingLayer is moving back and forth across the screen in a repeat forever action and
sprite is riding along on it. I want to get
sprite to "get off" of
movingLayer and "get on" to
self where it can do some actions of its own.
When I try to do this, I need to tell
movingLayer to remove
self to add
sprite. This is what I did...
[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];
stopAllActions is redundant, but that's not the problem. If I remove
movingLayer before adding it to
self I crash for accessing a zombie, and if I try to add it to
self first, I crash for trying to add something already added.
Have you tried setting cleanup to NO?
Alternatively, try to retain sprite before you remove it from movingLayer, then release it when you're done with it:
[sprite retain]; [movingLayer removeChild:sprite cleanup:YES]; [self addChild:sprite z:1]; [sprite release];