2013-02-13 2 views
1

실패,이 늘지을 열심히 프로그램 crashed.And 엑스 코드 로그는 말했다 :에최적화 애니메이션

어설 션 실패 - [CCSpriteBatchNode하는 AddChild : Z : 태그 :]/사용자/hanpengbo/문서/엑스 코드/cocos2d_helloWorld/cocos2d_helloWorld/libs와/코코 S2D/CCSpriteBatchNode.m : CCSpriteBatchNode.m 183

: 183

NSAssert(child.texture.name == textureAtlas_.texture.name, @"CCSprite is not using the same texture id"); 
존재

여기

// cache 
    CCSpriteFrameCache *cache=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache addSpriteFramesWithFile:@"birdAtlas.plist"]; 

    // frame array 
    NSMutableArray *framesArray=[NSMutableArray array]; 
    for (int i=1; i<10; i++) { 
     NSString *frameName=[NSString stringWithFormat:@"bird%d.png", i]; 
     id frameObject=[cache spriteFrameByName:frameName]; 
     [framesArray addObject:frameObject]; 
    } 

    // animation object 
    id animObject=[CCAnimation animationWithFrames:framesArray delay:0.1]; 

    // animation action 
    id animAction=[CCAnimate actionWithAnimation:animObject restoreOriginalFrame:NO]; 
    animAction=[CCRepeatForever actionWithAction:animAction]; 

    // sprite 
    cocosGuy = [CCSprite spriteWithFile: @"Icon.png"];//cocosGuy is CCSprite,declared earler 
    cocosGuy.position = ccp(200, 300); 

    // batchNode 
    CCSpriteBatchNode *batchNode=[CCSpriteBatchNode batchNodeWithFile:@"birdAtlas.png"]; 
    [self addChild:batchNode]; 
    [batchNode addChild:cocosGuy]; 

    [cocosGuy runAction:animAction]; 

UPDATE 내 코드입니다 : 여기 가 수정 된 코드이며, 작동이 잘

// batchNode 
    CCSpriteBatchNode *batchNode=[CCSpriteBatchNode batchNodeWithFile:@"birdAtlas.png"]; 
    [cocosGuy setTexture:[batchNode texture]]; 
    [self addChild:batchNode]; 
    [batchNode addChild:cocosGuy]; 
+0

BatchNode에는 몇 가지 요구 사항이 있습니다. 충돌의 일반적인 원인은 다음과 같습니다. inited, 스레드에서 batchnode 호출 또는 batchnode 텍스처가 이미 재활용되었습니다. 귀하의 경우 인스턴스 변수로 어딘가에'batchNode'의 참조를 보관하고 싶을 수도 있습니다. 파괴시키지 마십시오. –

+0

Xcode에서 전역 예외 브레이크 포인트를 사용하도록 설정하면 문제를 파악하는 데 도움이되는 충돌 줄이 표시됩니다 (실패한 Assert 줄을 복사하여 여기에 붙여 넣기). 가장 중요한 것은 모든 애니메이션 프레임이 birdAtlas.png에 있고 다른 텍스처 맵에 있는지 확인합니다. – LearnCocos2D

+0

*** 어설 션 오류 - [CCSpriteBatchNode addChild : z : tag :], /Users/hanpengbo/Documents/Xcode/cocos2d_helloWorld/cocos2d_helloWorld/libs/cocos2d/CCSpriteBatchNode.m:183 –

답변

1

작동, 당신의 Icon.png 텍스처는 birdAtlas.png에 있어야합니다 텍스처는 .plist에 적절한 선언과 함께. Batchnodes 1)은 하나의 텍스처 (그리고 오직 하나)로 생성되며, 2) SAME 텍스처의 자식 스프라이트 만 받아들입니다.

... 그리고, 당신의 의도를 잘 모릅니다 만, 일반적으로는이 경우에

CCSprite *cocosGuy = [CCSprite spriteWithSpriteFrame:[cache spriteFrameByName:@"bird1.png"]; 

있을 것입니다, 나는 배치 노드 추가 작동 것이라 생각합니다.

... 텍스처가 해당 애니메이션에 대한 애니메이션 프레임 만 포함하는 경우 배치 노드를 사용하면 애니메이션에 아무런 영향을 미치지 않을지 확실하지 않습니다. 프레임은 한 번에 하나씩 표시되므로 일괄 처리 된 그리기 호출의 이점을 누릴 수 있다고 생각하지 않습니다.

+0

"Icon.png 텍스처가 birdAtlas.png 텍스처에 있어야합니다."죄송합니다. 그 의미가 무엇인지 이해할 수 없습니다. 질감이란 무엇입니까? –

+0

텍스처는 기본적으로 그래픽 콘텐츠입니다 (예 : png). 아틀라스는 여러 이미지가 포함 된 텍스처입니다. birdAtlas에는 애니메이션에 필요한 10 개의 이미지가 모두 포함되어있을 것입니다. 또한 Atlases를 사용하여 단일 텍스처에서 여러 이미지를 그룹화 할 수 있습니다. 배치 노드를 사용할 때 배치 노드에 추가 된 모든 자식은 동일한 텍스처 (일반적으로 .png 파일 또는 다른 그래픽 형식)에서 가져와야하며 배치 노드는 동일한 텍스처로 만들어져 있어야합니다. – YvesLeBorg

+0

감사합니다.이 문제가 해결되었습니다. –