Skip to content
isdnetworks
Go back

초기화 순서를 바꿨더니 안 떴다

시작 화면 코드를 정리했다. AppDelegateapplicationDidFinishLaunching() 안에 초기화가 순서 없이 흩어져 있어 종류별로 모았다. 정리한 뒤에 앱이 검은 화면에서 멈췄다.

Table of contents

Open Table of contents

무엇이 바뀌었나

자료를 읽는 것을 앞에 모았다. 화면 준비를 그 뒤에 두고 소리를 마지막에 뒀다. 읽기에는 자연스러운 순서였다.

CCTextureCache 로 텍스처를 올리는 코드가 문제였다. 그것은 OpenGL 쪽에 올리는 작업이라 뷰가 먼저 있어야 한다. 원래 코드는 setOpenGLView() 가 맨 앞이었는데 자료를 앞으로 옮기면서 그 관계가 깨졌다. 읽기에 자연스러운 배치가 실제 의존 관계와 반대였다.

텍스처가 화면에 기대고 있었다

무엇이 무엇에 기대는지 적어 봤다. CCEGLViewCCDirector 에 물리는 것은 기대는 것이 없다. 해상도 설정과 텍스처 로딩은 그것에 기댄다. SimpleAudioEngine 과 저장 데이터는 기대는 것이 없다.

기대는 것이 없는 것부터 놓고 나머지를 그 뒤에 놨다. 뷰를 먼저 물리고 뷰에 안 기대는 것을 다음에 하고 뷰에 기대는 것을 그 뒤에 뒀다. 주석에 왜 그 순서인지도 적었다. 이것이 없으면 다음에 또 정리하다가 같은 일이 난다.

순서에 기대는 걸 줄였다

순서를 적어 두는 것보다 나은 것은 순서에 안 기대게 만드는 것이었다.

if (!CCDirector::sharedDirector()->getOpenGLView()) {
    CCLOG("TextureLoader::preload - OpenGL 뷰가 없음");
    return;
}

getOpenGLView() 로 필요한 것이 있는지 확인하고 없으면 로그를 남긴다. 순서가 틀리면 검은 화면만 보는 대신 이유가 남는다. 전부 이렇게 만들 수는 없었지만 한 번 겪은 자리에는 넣었다.

종료 순서와 확인 목록

시작 순서를 정하고 나니 종료 순서도 걸렸다. 저장이 게임 상태를 읽는데 그 전에 화면을 멈추면 상태가 이미 정리된 뒤일 수 있다. 종료는 시작의 역순이 대개 맞았고 나중에 만든 것을 먼저 정리한다.

이번에는 앱이 안 떠서 바로 알았지만 조금 이상한 정도면 못 알아챌 수 있다. 정리 전후로 확인할 것을 목록으로 정해 뒀다. 앱이 뜨는지와 시작 화면 그림이 다 나오는지와 소리가 나는지와 저장 데이터가 읽히는지와 스테이지를 끝까지 할 수 있는지 다섯이다.

읽기 좋게 고치는 작업은 동작이 바뀌면 안 되는 작업이다. 확인 목록이 있어야 그것을 보장할 수 있다.

정리


Share this post on:

Previous Post
같은 숫자를 세 곳에 적어 두고 있었다
Next Post
순위를 빠르게 보여줘야 했다