2013-07-13 3 views
3

나는 cocos2d v1.1.0-beta2b를 사용하는 ios 앱을 가지고 있으며 에미 터의 자동 제거 기능에 이상이 있습니다.CCParticleSystemQuad가 조기에 제거되었습니다. - ios

내 질문은 :

내가 stopSystem를 호출하기 전에 YES 제거 할 것 와 CCParticleSystemQuad무한 지속 시간, 세트를 autoRemoveOnFinished 것을 어떤 방법 있습니까? 그것은 자식으로 추가 물론이고, 모든 것이 완벽하게 작동,

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; 
emitter = [[[CCParticleSystemQuad alloc] 
            initWithDictionary:dict] autorelease]; 
emitter.duration = -1.0f; 
[emitter setAutoRemoveOnFinish:YES]; 
[self addChild:emitter z:10]; 

을 다음 다음과 같이 내가 이미 터를 초기화

: 여기

몇 가지 추가 정보입니다. 가 많은 장소에서 제안한 것처럼, 순서를 제거하려면 내가 전화 : 모든 입자는 예상대로 제거 이미 터를 사라 그 후

[emitter stopSystem]; 

.

지금까지 모든 것이 잘되었습니다.

그러나 방출기가 조기에 방출되었다는 것을 나타내는 여러 가지 충돌 보고서가 발생했으며 내 응용 프로그램이 이미 터가 이미 릴리스 된 stopSystem 행에서 충돌합니다. 에미 터 활동 중에 장치가 잠기거나 잠금 해제 될 때 가끔씩 발생한다는 것을 나타내는 몇 가지 피드백이 있습니다. 나에게 그것은 작동하며 이러한 충돌은 거의 없습니다. 나는 그런 일이있는 상황을 재현 할 수 없었다, 그래서 나는 다시 사람을 물어

무한 기간 CCParticleSystemQuad 세트를 autoRemoveOnFinished 것을 어떤 방법 YES 있는가stopSystem으로 전화하기 전에 제거 될 예정입니까?

+0

cocos2d v1.1.0-beta2b를 사용하고 있습니까? 이 버전이 맞습니까? – Bivis

+0

이 문제는 새 버전의 cocos2d에서만 발생합니다 ... 새 버전에서는 약간의 결함이 있습니다 ... – iPhoneProcessor

답변

-1

좀비에 감염된 것 같습니다.

좀비는 매달려있는 포인터로 인해 발생합니다. 가리키는 대상이 이미 해제되었지만 포인터가 계속 그 위치를 가리키고 있습니다. 해당 객체의 메서드를 호출하려고하면 충돌이 발생합니다.

emitter = [[[CCParticleSystemQuad alloc] 
           initWithDictionary:dict] autorelease]; 

당신의 emitter 포인트 객체를 오토 릴리즈합니다. autorelease 풀이 고갈되지 않는 동안 "계속"존재하는 것처럼 보입니다.

장치가/이미 터 활동 중 잠금 해제 잠겨있을 때 가끔 발생,

이 잠금/잠금 해제 같은 소리는 오토 릴리즈 풀 배수를 유발하고 emitter는 좀비로 변합니다.

NSZombieEnabled으로 디버깅 할 수 있습니다.NSZombieEnabled 객체가 있어야만 즉시 할당 해제되지 않고 NSZombie 객체가됩니다. NSZombie 메서드를 호출하려고하면 "deallocated instance로 보낸 메시지"라는 콘솔 메시지가 표시됩니다.

+1

잘못된 경우 수정하십시오.하지만 addChild를 사용하여 cocos2d에서 이미 터를 자식으로 추가하면 해당 객체가 자동으로 리 레어 ... 내 게시물을 편집하여 명확하게 만듭니다. – am1987