2012-12-04 3 views
0

디버깅하는 방법을 알 수 없습니다. CCScene을 실행 시켰고 장면이 바뀌면 다음 오류 메시지가 나타납니다.Cocos2d : 일괄 처리 된 스프라이트가있는 불쾌한 예외

장면에 CCSpriteSubclass가 추가 된 스프라이트 배치 노드가 있습니다. (INT) sceneId 방법 :

//Prepare sprites sheets for the rest of the game art 
[frameCache addSpriteFramesWithFile:[NSString stringWithFormat:@"art%i-hd.plist", sceneId]]; 
sharedSpriteMainBatchNode = [CCSpriteBatchNode batchNodeWithFile:[NSString stringWithFormat:@"art%i-hd.png", sceneId]]; 

배치 노드가 initWithId에 다음과 같이 생성됩니다

-(void) cleanup 
{ 
    [[GameController sharedGameController].musicLayer removeMusicSourceForKey:backgroundMusicFileName]; 


    [CCTextureCache purgeSharedTextureCache]; 
    [CCSpriteFrameCache purgeSharedSpriteFrameCache]; 
    [CCAnimationCache purgeSharedAnimationCache]; 

// [[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 
    [super cleanup]; 
} 

: 정리 방법이고 그 다음은 어설 션 오류 메시지를 찾을 수

그런 다음 모든 CCSpriteSubclass 객체를 추가합니다.

** Assertion failure in -[CCSpriteSubclass setTexture:], /Users/xxx/Desktop/xxx/xxx/libs/cocos2d/CCSprite.m:934 
2012-12-03 12:54:33.335 RockTale[869:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite: Batched sprites should use the same texture as the batchnode' 
*** First throw call stack: 
(0x338d28bf 0x303c61e5 0x338d27b9 0x311193b3 0x9ad43 0x9a2fb 0x4bca3 0x44ddf 0x38b07 0x503f7 0x94c03 0xbbeed 0xbcfe7 0x34fb7423 0x34fb7379 0x31b4cf93 0x36e52891 0x3389bf43 0x338a6553 0x338a64f5 0x338a5343 0x338284dd 0x338283a5 0x37f9afcd 0x3128b743 0x2edf 0x2ea0) 
terminate called throwing an exception(lldb) 

편집 : 어설 션 오류 메시지의

여기에 대한 SetTexture 방법에 중단 점을 추가하고 내가 :)

breakpoint on setTexture method in subclass

EDIT 2 참조 "하지 말라"무엇인가 : 나는 자바에서와 같이 전체 stacktrace를 가져올 수있다. 나는 다른 질문에서이 질문을했고 전역 예외를 추가해야한다고 들었다. 스택 스택을 검색하는 방법을 알아야한다.

답변

0

이 문제는 here과 같은 방식으로 해결되었습니다. 그것은 이전 클래스가 기존 클래스를 대체하고 있었으므로 이전 클래스 클린업 메소드가 제거 프레임 캐시를 호출하여 스프라이트 프레임을 호출했기 때문에 결과적으로 아직 사용되지 않은 스프라이트 프레임을 제거했기 때문입니다. 새로 생성 된 객체.

0

예외 메시지 텍스트에서 다른 스프라이트 시트의 스프라이트 프레임을 사용하여 스프라이트를 만드는 것처럼 보입니다.

+0

Scene init에서 텍스처 데이터를 제거 할 때 아무도 알아 내지 못하기 때문에 메모리에 참조가 없어야한다고 가정합니다. 메서드에 중단 점을 추가 한 스크린 샷을 추가했습니다. NSObject 클래스 클래스가 "알 수 없음"이라는 것을 알 수 있습니다.이게 무슨 뜻입니까? 아니면 그냥 cocos2d 캐스팅 때문입니까? – mm24

+0

은 캐시 정리가 어떻게 영향을 미칠 수 있는지 이해할 수 없습니다. 어쨌든 배치 노드에 추가하는 스프라이트 중 어느 것이 artNum.png 아틀라스에 없는지 확인하십시오. 또한 objective-c 예외 breakpoint를 추가 할 수 있으므로이 예외가 발생하는 실제 행을 볼 수 있습니다. – Morion