2017년 8월 4일 금요일

[20170805] modify view of cocos2d-x 3.x display stats

cocos2d-x 로 게임을 만드는 경우 많은 사람들이...
director->setDisplayStats( true ) // turn on display FPS
...기능을 활용합니다.

보통은 아래와 같이 출력됩니다.
하단에 적절한 크기로 출력되죠.

그러나 저해상도 게임을 만들다 보면 Display Stats 가 불편할 정도로 크게 나오게 됩니다.
Display Stat의 크기는 일정한데 해상도가 작아지니 당연한 일입니다.


256 x 160 의 해상도로 만드는 게임의 화면을 봅시다.
이 화면을 보면서 개발하면 아마 눈이 빠지겠다 싶을겁니다.

그래서 Window Frame Size 를 Design Resolution 의 배수로 설정해서 큰 화면에서 쾌적한 개발을 진행하는 꼼수를 사용하게 됩니다.
제가 개발하는 게임에서는 5배가 적용되어 1280 x 800 으로 Window Frame Size 가 설정됩니다.
그리고...
그대로 커집니다. o_o

불편하죠. 매우 불편합니다. 게다가 안티가 먹어서 흉하기 까지 합니다.
그러므로 약간 손을 보기로 했습니다.
엔진 코드에는 가급적 손을 대지 않는것이 저의 원칙이지만 이 경우에는 잠시 원칙은 접어두기로 했습니다.

CCDirector.cpp 파일을 엽니다. 그리고...
void createStatsLabel();
...함수를 찾아갑니다.
중간에 보면 아래와 같은 코드가 있습니다.

float scaleFactor = 1 / CC_CONTENT_SCALE_FACTOR();

이 코드를 아래와 같이 바꿔줍니다.

float customScaleRate = ( _openGLView->getDesignResolutionSize().height / _openGLView->getFrameSize().height );

float scaleFactor = ( 1 / CC_CONTENT_SCALE_FACTOR() ) * customScaleRate;


그리고 또 아래에 보면 다음과 같은 코드가 있습니다.

const int height_spacing = 22 / CC_CONTENT_SCALE_FACTOR();

이 코드도 바꿔줍니다.

const int height_spacing = ( 22 / CC_CONTENT_SCALE_FACTOR() ) * customScaleRate;

Design Resolution 기준으로 나오는 Display Stats 를 Window Frame Size 에 맞추어 나올수 있도록 Scale 을 적용해주는 코드입니다.

그리하여 평화가 찾아옵니다.

댓글 없음:

댓글 쓰기