728x90
cocos2d-x 개발 중에, 왼쪽하단에 나오는 숫자가 궁금한 분들이 많은 것 같습니다.
제가 알고 있는 선에서 정리할까 합니다.
=====
100
0.027
31.1
=====
위와 같이 표시된 상태를 예로 하겠습니다.
첫번째 숫자
draw된 개체 수를 말합니다.
즉, 현재 sprite, layer, label등의 개체들을 얼마나 addChild했는가 입니다.
물론 빈 레이어를 올려도 숫자가 증가하고,
addChild한 sprite를 setVisible(false)로 하면 (당연하겠지만) 증가하지 않습니다.
이 숫자는 높을수록, 게임 퍼포먼스가 떨어질 확률이 높겠지요.
많은 개체들을 draw하려고 하니, 프레임은 물론, 발열, 배터리까지 영향이 있게 되겠지요.
줄일 수 있으면, 최대한 줄이는게 좋겠구요,
팁을 드리자면, 10장의 이미지 리소스를 각각 sprite로 addChild하면 10이 증가하는 반면,
배치노드 1장을 써서 10장의 sprite를 그리면 1증가합니다. (CCSpriteBatchNode)
한가지 더,
10장의 이미지 리소스를 texturepacker등의 툴로 1장의 png와 plist로 뽑아낸 후
CCSprite::createWithSpriteFrame(cache->spriteFrameByName("a.png")) 등의 방법으로 생성한다면
로딩 속도 및 메모리에서 이득을 볼 수 있으나, 역시 10장 모두 addChild됩니다.
두번째 숫자
두번째는 세번째와 의미가 같다고 알고 있는데, 매 프레임을 draw하는 시간입니다. 프레임당 초이죠.
통상 60프레임을 기준으로 개발한다고 했을 때, 초당 60프레임을 호출하므로, 프레임당 약 0.0166초 입니다.
최근 프레임들의 평균값을 표시하는 것 으로 알고 있습니다.
결국 매 프레임을 그리는 시간인건데, 무심코 지나칠 수 없는 부분이 있습니다.
보통 많이들 사용하시는 void update(float dt) 함수를 예로 들면,
실제 게임을 만들었을 때, 여러가지 단말기에 대한 테스트를 하게 됩니다.
이 때 눈에 띄는 것이 단말기별 fps인데, 이는 단말기 마다 차이가 나기 마련입니다.
update() 함수에서 캐릭터가 60번의 프레임에 한번씩 이동하는 로직이 있다고 했을 때,
프레임을 초당 60으로 설정했으므로 이론상 update함수는 1초에 60번 호출되어야 합니다.
void someLayer::update(float dt)
{
++m_nTimes;
if( m_nTimes == 60 )
move();
}
예상했던 60 프레임째에 캐릭터는 이동했지만,
실제 단말기마다 이동하는 시간은 차이가 나게됩니다.
즉, 프레임에 따라 들어오는 시간의 값 dt가 달라지게 되는데, 이 부분은 염두에 두어야 합니다.
프레임이 떨어지면, dt는 증가하고, (30프레임 x 0.033 = 약 1초)
프레임이 올라가면 dt는 감소합니다. (60프레임 x 0.0166 = 약 1초)
세번째 숫자
초당 프레임 수 입니다.
참고하세요.
728x90
'cocos2d-x' 카테고리의 다른 글
스프라이트(Sprite) 액션 일시정지 & 다시시작 (1) | 2014.03.30 |
---|---|
스케줄(Schedule) 정리 中.. (0) | 2014.03.30 |
Scene 전환 종류 정리中 (0) | 2014.03.03 |
액션 종류들 정리中 (0) | 2014.03.03 |
cocos2d-x (0) | 2014.02.19 |