2012-06-12 6 views
1

CCSpriteBatchNode를 사용하여 OpenGL 호출 및 메모리 사용량을 줄이려고합니다. [: Z : 태그 : CCMenuItemSprite하는 AddChild]Cocos2D 2.0 - CCSpriteBatchNode, CCMenuItem 및 CCmenu 사용

단서 -

CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:@"atlasGeral.png"]; 

CCSprite *inputNormal = [CCSprite spriteWithSpriteFrameName:@"normalInput.png"]; 
CCSprite *inputPressed = [CCSprite spriteWithSpriteFrameName:@"PressedInput.png"]; 
[batchNode addChild:inputNormal]; 
[batchNode addChild:inputPressed]; 


CCMenuItem *input = 
    [CCMenuItemSprite itemWithNormalSprite:inputNormal 
          selectedSprite:inputPressed 
            target:self 
           selector:@selector(InputMenu:)]; 
CCMenu *mInputMenu = [CCMenu menuWithItems:input, nil]; 

이 상기 메시지 어설 실패로 catrastophically 충돌되어

이 코드를 사용하여 CCMenu을 만들어야? BTW 누군가 CCMenus, CCMenuItems 및 다른 미녀처럼 이러한 다른 요소와 함께이 CCSpriteBatchNode를 사용하는 방법을 설명하는 자습서를 만들거나 가리킬 수 있습니까? Cocos2D는 거의 모든 주요 기능에 대한 문서가 거의 없습니다.

감사합니다.

답변

1

글쎄, inputNormal과 inputPress 스프라이트는 배치 노드의 자식이다. 따라서 자식을 다른 하위 노드 하위 노드에 다시 추가하려고하면 이미 부모가 있으므로 coco는 빈다. 나는 두렵다. imnsho, 배치 노드는 매우 정격을 초과합니다. 개선 이득은 극소수의 제한된 사용 사례에서만 얻을 수 있습니다.

다시 똑바로 CCMenuItemSprite 코드 (버전 1.0.1)에서

-(void) setNormalImage:(CCNode <CCRGBAProtocol>*)image 
{ 
    if(image != normalImage_) { 
     image.anchorPoint = ccp(0,0); 
     image.visible = YES; 

     [self removeChild:normalImage_ cleanup:YES]; 
     [self addChild:image]; 

     normalImage_ = image; 
    } 
} 

메뉴 항목 자체에 (이미 아이) 스프라이트를 추가하려고합니다. 콩은 없어.

+0

감사합니다. 내가 본 CCSpriteBatchNode는 정말 유용한 것이 아닙니다. 그들은 매우 제한된 사용과 많은 문제가 있습니다. 유일한 해결책은 아마도 내 자신의 CCMenu와 같은 클래스를 만드는 것입니다! – SpaceDog

+0

CCSpriteBatchNode는 이미지가 다소 크거나 크기가 조정되고 회전되는 경우 성능이 크게 향상 될 수 있습니다. 스프라이트 배치 노드에는 스프라이트를 자식으로 허용하는 것 외에 다른 제한 사항이 없으므로이를 초기에 디자인에 통합하십시오. – LearnCocos2D

+0

@ LearnCocos2D - 계층의 여러 zOrders에서 여러 텍스처의 그래픽 객체를 삽입하려고하지 않는다고 가정 할 때 유스 케이스에 동의했습니다. 레이어에 여러 배치 노드를 추가하는 방법을 놓친 것일 수도 있지만 모든 하위 스프라이트가 고유 한 z 축 (레이어)을 참조하도록해야합니다. – YvesLeBorg

관련 문제