2011-07-16 5 views
4

나는 CCLayer이라는 CCLayer의 자식 인 sprite이라고하는 CCSprite을 가지고 있습니다.이 게임은 현재 내 게임 논리를 실행중인 CCLayer의 자식이기 때문에 self입니다. movingLayer은 반복적 인 영원한 동작에서 화면을 가로 질러 앞뒤로 움직이며, sprite이 그 위에 타고 있습니다. 나는 을 movingLayer에서 "내리고"self으로 "올라 타서"자신의 행동을 할 수있게하고 싶습니다. 나는이 작업을 수행 할 때한 부모에서 다른 부모로 CCSprite를 전송하는 방법은 무엇입니까?

, 나는 stopAllActions 중복 생각

- (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]; 
} 

... 이것은 내가 무슨 짓을 sprite. 추가 spriteself을 제거하기 위해 movingLayer 말할 필요하지만, 그것은 문제가되지 않습니다 . 내가 self에 추가하기 전에 을 movingLayer에서 제거하면 나는 좀비에 액세스하기 위해 충돌하며, 먼저 self에 추가하려고하면 이미 추가 된 것을 추가하려고 시도 할 때 충돌이 발생합니다.

답변

9

정리를 설정하지 않으셨습니까? 당신이 그것을 완료하면 다음을 해제, movingLayer에서 제거하기 전에

또는 스프라이트를 유지하려고 : 유지 및 release``에 대한

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

하나! – Emadpres

관련 문제