2011-09-11 4 views
0

이 설정이 있습니다.액션으로 sprite를 제거합니다.

레이어에 자식이있는 스프라이트가 있습니다. 스프라이트는 init 메소드에서이 코드를 가지고 :

id fadeOut = [CCFadeOut actionWithDuration:1.0f]; 
id death = [CCCallFunc actionWithTarget:self selector:@selector(die)]; 
self.deathAction = [CCSequence actions:fadeOut, death, nil]; 
[self runAction:deathAction_]; 

죽음 조치가 상태가 '죽은'로 변경되는 스프라이트의 '다이'메소드를 호출합니다.

[self removeChild:child cleanup:YES]; 

문제는 자식 스프라이트가 여전히 줄 끝에서 2 retaincount을 가지고 있다는 것입니다 :의 업데이트 방법에

는 사람이 느릅 나무 레이어를 확인 모든 어린이와 제거가와 '죽은 자'입니다. 내가 알고 있듯이 CCCallFunc에 의해 유지됩니다. 이 deathAction을 생략하고 불투명도가 0 인 스프라이트를 제거하면 (코드가 희미해질 때) 코드가 작동하고 dealloc 메서드가 호출됩니다.

조치를 올바르게 사용하여 스프라이트를 제거해야하는 방법은 무엇입니까?

답변

1

모든 코드를 표시하지 않았습니다. 그러나 그것은 당신이 그 행동에 대한 언급을하고 있고 그것을 풀어 버리는 것을 잊어 버리고있는 것처럼 보입니다. link 그렇게 이 정확할 것으로 거기에 포함되지 않습니다 확실히 그것을 사용하지 마십시오 :

retainCount 악명 신뢰할 수 없다.

+0

참조에 대한 귀하의 말이 맞았습니다. 제거가 스프라이트에 의해 내부적으로 처리되도록 코드를 수정했습니다. 나는 액션을 통해 죽음 메서드를 호출하고 그 안에'[self removeFromParentAndCleanup : YES];를 호출합니다. 문제는이 호출 전에 '[deathAction_ release];'를 호출하는 것이 었습니다. 왜? 스프라이트의 dealloc 메소드에서 릴리스 콜이 있습니까? 액션을 통해서가 아닌 다른 방법으로 스프라이트를 제거하기를 원한다면 어떨까요? – bolshas

+0

균형을 유지하고있는 것을 정확히 모른 채 개체를 해제하는 경우 문제가 해결되지 않고 증상 만 숨겨져 있습니다. – bbum

관련 문제