티스토리 뷰
예전에 DirectX에서 숫자를 화면상에 띄울 때는 숫자마다 그림을 따로 둬서 출력했었는데요.
Cocos2d-x에 Label이 잘 되어 있긴 합니다만 커스텀 텍스쳐를 이용하여 Label을 만드는것은 조금 난해하더군요.
.fnt 파일 만드니, 뭐니 하는건 갠적으로 별로 맘에 안들어서 그냥 이전처럼 직접 만들었습니다.
소스 보시면 딱 감이 오실텐데요.
CCNode* MakeNumberLabel( unsigned int number, const char* texture_file_name, const float width, const float height )
{
CCArray *frames = CCArray::create();
CCSpriteFrame *frame;
int i;
for( i=0; i<10; i++ )
{
frame = CCSpriteFrame::create( "sprite_numBig.png", CCRect::CCRect( width*i, 0, width, height ) );
frames->addObject( frame );
}
CCArray *nums = CCArray::create();
if( number > 0 )
{
while( number != 0 )
{
nums->addObject( CCInteger::create( number%10 ) );
number /= 10;
}
}
else
nums->addObject( CCInteger::create( 0 ) );
CCNode *numberLabel = CCNode::create();
numberLabel->setAnchorPoint( ccp( 0, 0 ) );
int num;
float offset;
CCSprite *spr;
for( i=nums->count()-1; i>=0; i-- )
{
num = ( dynamic_cast<CCInteger*>( nums->objectAtIndex(i) ) )->getValue();
offset = (nums->count() - 1 - i) * width;
frame = dynamic_cast<CCSpriteFrame*>( frames->objectAtIndex(num) );
spr = CCSprite::createWithSpriteFrame( frame );
spr->setAnchorPoint( ccp( 0, 0 ) );
spr->setPositionX( offset );
numberLabel->addChild( spr );
}
return numberLabel;
}
함수 인자를 보시면 아시겠지만 출력할 숫자, 숫자 텍스쳐의 파일경로, 각 숫자 타일 하나하나의 가로, 세로 값을 넣어주면 됩니다.
텍스쳐파일에는 0부터 9까지의 숫자가 순서대로 모두 동일한 크기로 이어붙어져 있어야 하구요. (스프라이트 애니메이션 그림 파일처럼요.)
함수 내부에서 CCNode를 생성하고, 그 자식들로 각 자리의 숫자를 CCSprite로 만들어 child로 만듭니다.
즉, 숫자의 길이 + 1개만큼 노드가 생성됩니다.
그리고 만들어진 숫자라벨의 AnchorPoint는 좌측 하단입니다. (Align 기능 등은 구현하지 않았습니다.)
사용법 :
CCNode *numLabel = MakeNumLabel( 1234, "sprite_numBig.png", 100, 145 );
numLabel->setScale( 0.5 ); // 크기를 반으로 작게 바꿈
numLabel->setPosition( ccp( 100, 100 ) ); //위치를 100,100으로 옮김
Layer->addChild( numLabel ); // 레이어에 등록
'프로그래밍 > 게임 개발' 카테고리의 다른 글
[cocos2dx] JSON을 활용한 스프라이트 애니메이션 클래스 제작 (0) | 2013.11.21 |
---|---|
[cocos2dx] iOS, Mac 프로젝트 Get data from file failed 에러 (2) | 2013.11.12 |
[Cocos2d-x] Touch Manager를 공유합니다. (1) | 2013.07.11 |
[Cocos2d-x] CCParallaxNode를 쓰지 않기로 결정했다. (1) | 2013.07.06 |
[Cocos2d-x] Lua binding - CCMenuItemFont 터치 핸들러 (1) | 2013.07.05 |
- Total
- Today
- Yesterday