본문 바로가기

Dev/Cocos2D

CCSpriteBatchNode의 기본 사용법

시간 관계상 짤막하게 요약만 하여 작성하겠습니다.


1. batch를 쓰면 좋은점

 : 첫째, 다중레이어 효과등 스프라이트간의 속도, 간격 조절등이 용이하게 메소드화 되어 있어서 관리하기가 편함

 : 둘째, 가장 중요한 부분인데, opengl의 drawcall을 최소화하여 퍼포먼스 비용을 최소화할수있음.(속도향상 기대)

일단 급하게 적은 장점으로는 위의 2가지가 있음. 나머지도 더있겠지만...


2. 사용법

 : 간단하다. 일반 스프라이트처럼 BatchNode를 생성하고 사용할 스프라이트들을 child시켜주면 끝.

 : 단! BatchNode 생성시 file 혹은 texture를 요구하는데, 이게 포인트임. (정확하게는 텍스쳐를 요구한다. 생성 방법이 file로도 될뿐, 결국은 해당 file의 텍스쳐만을 불러와서 로드시켜놓는것이 목적)


3. 구조

 : BatchNode는 하나의 텍스쳐파일을 가진 상태로(아틀라스 이미지) 스프라이트 생성등에서 텍스쳐를 요구할때 이미지를 부분적으로 잘라내어주는 방식.

이러한 구조로 인하여, 그래픽 엔진(opengl)의 drawCall요청을 받을시 자신이 소유하고 있는 텍스쳐를 draw할 부분만 동시적으로 잘라내어 엔진쪽으로 넘기는 것으로 보임.

 : 그렇기 때문에 해당 BatchNode가 가지고 있는 텍스쳐가 아닌 다른 이미지를 사용한 스프라이트의 경우 BatchNode의 하위로 child시킬수가 없다.


4. 코드

//1. plist로 미리 만들어진 텍스쳐를 메모리에 할당
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"object_a.plist"];
//2. 해당 텍스쳐이미지를 BatchNode에게 할당하여 node생성
CCSpriteBatchNode *a = [CCSpriteBatchNode batchNodeWithFile:@"object_a.png"];
//3. BatchNode가 소유한 텍스쳐내의 이미지를 이용하는 sprite 생성
CCSprite *g = [CCSprite spriteWithSpriteFrameName:@"player.png"];
//4. 생성한 sprite를 BatchNode로 addChild 시켜줌
[a addChild:b];