제작중인 게임에 맵 크기는 1920x1440이다.

맵에 넣을 타일의 크기는 32x32이다. 그러면 타일은 총60 x 45 = 2700장이 들어간다. 2700장의 타일객체 하나씩 리소르파일을 불러온다면 랙을 버티지 못한다. 컴퓨터가 좋타면 상관없지만 저는 구짐...


그래서 랜더타겟이란 무엇인가?

일단 cocos2d 홈페이지에 가봤다.


Render to Texture 구글번역기 해석
텍스처는 파일이나 다른 IO 스트림에서로드하는 데 사용됩니다. 이 외에도, 우리는 새로운 메커니즘을 제공 RenderTexture 질감 런타임을 생성 할 수 있습니다. 그럼 당신은 텍스처 아틀라스 등을 작성, 스프라이트를 생성, 캡처 한 질감을 얻을 수 있습니다

그런데 Cocos2d-x프로그래밍이란 책을보면서 공부하다보니까 CCSpriteBatchNode 가 있었다. CCSpriteBatchNode 대박이다...

void BlockManager::loadResource()
{
m_bLoaded = true;
m_allTile = CCSpriteBatchNode::spriteSheetWithFile("box/tileBox.png");
m_pGround->addChild(m_allTile);
}
일단 이전에 리소스 파일을 읽어오던 방법을 바꿨다.

void BlockManager::addBlock(int _type, CGPoint _pos, int _angle)
{
if ( m_bLoaded == false && m_pGround == NULL) return;
int x = _pos.x / 32, y = _pos.y / 32;
CGRect rc;
int TileInfo;

switch(_type)
{
case 0:
TileInfo = TILE_CANMOVE;
rc.origin = ccp(0,0);
rc.size.width = 32;
rc.size.height = 32;
break;
case 1:
TileInfo = TILE_CANMOVE;
rc.origin = ccp(32,0);
rc.size.width = 36;
rc.size.height = 32;
break;
case 2:
TileInfo = TILE_NOTMOVE;
rc.origin = ccp(68,0);
rc.size.width = 50;
rc.size.height = 52;
break;
default: return;
}
for( int i = 0 ; i < MAX_BLOCK ; i++ ){
if( m_pBlock[i] != NULL )continue;
m_pBlock[i] = new Object_Block;
m_pBlock[i]->initWithBlock(m_allTile->getTexture(), rc, TileInfo);
m_pBlock[i]->setPosition(ccp(x*32,y*32));
m_pBlock[i]->setRotation(_angle);
m_allTile->addChild( m_pBlock[i] );
break;
}
}
넣어주는 방법도 바꿨다. 

결과 사진


급하게 작업하느라 흰색 부분은 지우지 못했다. 리소스 작업을 좀 해야 한다.

다른 타일을 깔았음에도 불구하고 엄청난 프레임이 차이가 난다.

오늘 CCSpriteBatchNode로 코드를 고치면서 느낀 점은 아직도 배워야 할 것은 많지만 코딩은 너무너무 재밌다.


반응형