2012-02-19 2 views
3

CCSpriteBatchNode를 사용하면 이미지의 각 이미지가 OpenGL에 의해 별도로 그려지지 않으므로 화면에서 동일한 이미지가 많은 경우 배치 노드를 사용하기 위해 성능이 향상됩니다.CCSpriteBatchNode : 단일 프레임 또는 전체 텍스처 맵을 사용 하시겠습니까?

그러나 CCSpriteBatchNode에 전체 텍스처 맵을로드하면 어떻게되는지 궁금합니다. 이 말은 텍스처 아트 리에서 단일 스프라이트 프레임을 사용하면 텍스처 안의 모든 스프라이트 프레임을 (배경 뒤에서) 그립니다.

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"texture.plist"]; 

CCSpriteFrame *starFrame=[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"throwstar.png"]; 

stars=[CCSpriteBatchNode batchNodeWithTexture:starFrame.texture]; 

[self addChild:stars]; 

또는 대신 전체 텍스처 아틀라스보다는 배치 노드 starFrame.texture를 사용하여 : 즉

,이 일 사이의 성능 차이가 있습니까?

답변

1

CCSpriteBatchNode는 그 자식을 그립니다. 따라서 추가 된 자식 (CCSprite 객체 여야 함) 만 그려집니다. 스프라이트는 CCSpriteFrame을 사용하기 때문에 각 자식은 스프라이트 프레임에 정의 된 텍스처 부분 만 렌더링합니다.

CCSpriteFrame 객체는 사용하는 텍스처에 대한 참조를 보유합니다. 이것은 CCSpriteBatchNode 텍스처와 같은 텍스처입니다. 즉, 스프라이트 프레임의 텍스처는 항상 텍스처 아틀라스의 일부가 아닌 텍스처 아틀라스의 텍스처입니다. 이것이 CCSpriteFrame의 CGRect가하는 것입니다. 스프라이트가 더 큰 텍스처의 특정 영역 만 그리도록 지시합니다.

+0

batchnode가 그 아이들을 그렸을 때, 그것들은 단지 한 번에 모두 정확하게 그려진다 (일괄 적으로 GL 호출 하나에서)? 그러나 여러분은 또한 각 어린이가 그 부분 만 렌더링한다고 언급합니다. 따라서 여러 자식이 동일한 배치 노드 텍스처와 다른 프레임을 갖는 경우 텍스처의 다른 부분이기 때문에 각각의 자체 렌더링 호출을 얻고 있습니까? – johnbakers

관련 문제