Skip to content
isdnetworks
Go back

내 기기에서만 확인하고 냈다

새 화면을 넣고 내 기기에서 확인했다. 잘 나와서 그대로 냈는데 버튼이 화면 밖으로 나가 안 눌린다는 얘기가 들어왔다.

Table of contents

Open Table of contents

무엇이 달랐나

내 기기는 WVGA 라 가로가 800이었다. 문의한 쪽은 HVGA 로 480이었다. 버튼은 getWinSize() 에서 일정 값을 뺀 자리에 뒀다.

btn->setPosition(ccp(win.width - 120, 60));

숫자만 보면 좁은 화면에서도 안쪽이다. 문제는 버튼 크기였다. CCSprite 는 만들 때 setAnchorPoint(ccp(0.5f, 0.5f)) 를 한다. 기준점이 가운데라는 뜻이다. 이미지 폭이 200이면 절반인 100이 오른쪽으로 더 나간다.

요소 크기를 기준으로 잡았다

고정 값 대신 getContentSize() 를 받아 모서리에서 띄우게 바꿨다.

btn->setPosition(ccp(win.width - btn->getContentSize().width / 2 - margin,
                     btn->getContentSize().height / 2 + margin));

비율로 잡는 방법도 있었는데 이쪽이 더 확실했다. 버튼 이미지 크기가 바뀌어도 안 나간다.

세로 비율도 달랐다

크기를 맞추고 나니 다른 것이 보였다. 세로가 800인 기기와 854인 FWVGA 기기가 있어 가로세로 비가 다르다.

배경을 꽉 채우려고 가로세로를 따로 늘렸다. 비가 다른 기기에서 찌그러졌다. 한 배율로 setScale() 하고 넘치는 부분을 잘라내는 쪽으로 바꿨다.

float s = MAX(win.width / bg->getContentSize().width,
              win.height / bg->getContentSize().height);
bg->setScale(s);

비가 유지되고 화면은 다 덮인다. 대신 가장자리가 잘리니 중요한 것을 거기에 두지 않았다.

확인 목록과 그 밖의 차이

기기를 여러 대 못 구해서 AVD 를 네 개 만들어 뒀다. QVGAHVGAWVGA 와 가로 배치다. 화면을 하나 만들 때마다 넷을 돌려 봤고 대부분 첫 번째에서 걸렸다.

해상도만 다른 것이 아니었다. 메모리가 적은 기기에서는 텍스처를 많이 쓰는 스테이지가 꺼졌다. Android 판이 낮은 기기에서는 없는 기능을 부르다 실행 중에 죽었다. 다 갖출 수는 없다. 확인 가능한 것부터 목록으로 만들었다. 못 한 것은 못 했다고 적어 뒀다.

시험 빌드에는 getWinSize() 값을 화면에 띄웠다. 문의를 받았을 때 그 숫자를 물어보면 어느 조건인지 바로 안다. 없으면 기종을 듣고 사양을 찾아봐야 한다.

정리


Share this post on:

Previous Post
한 번 재 보고 계획을 버렸다
Next Post
리소스 파일명이 규칙이었다