게임 개발/Cocos2d-x

[Cocos2d-x] iOS 7이상에서 런치 이미지 페이드아웃 방지

날개 2014. 3. 25. 14:44
어플리케이션을 개발 할 때, 일반적인 어플리케이션의 경우도 가끔 필요할 때가 있지만, 특히 게임의 경우 여러가지 이유로 런치 이미지(Launch Image, 또는 Splash Screen)를 필요한 만큼 보여주거나 커스터마이징 해야 할 필요가 있습니다.

iOS의 경우는 기본적으로 Xcode에서 런치 이미지를 지정하여 프로그램이 실행될때 바로 해당 이미지가 나오게 되며, 프로그램 로딩이 끝나면 사라지게 됩니다. 그래서 Cocos2d-x의 사용자의 경우, 보통 런치 이미지를 연결해서 보여주기 위해 첫번째 씬을 런치 이미지가 나타나게 하고, 여기서 타이틀로 넘어가기 전에 필요한 처리를 하고 타이틀씬으로 넘어가는 과정을 거치게 되지요.


문제는 iOS 6까지는 아무런 문제가 없었지만, iOS 7부터는 똑똑한(?) iOS가 런치 이미지를 페이드아웃(Fade Out)하면서 사라지게 한다는 것이죠. (iOS 6까지는 로딩이 되면 페이드아웃 없이 바로 사라졌음)


일반적인 어플리케이션의 경우 첫 화면이 나오기까지 부드럽게 나온다는 장점이 있지만, 게임의 경우 다른 처리를 위해 좀더 길게 가져가려고 트릭을 쓴 경우, 런치 이미지가 중간에 잠깐 사라졌다 나타나는것 같이 보이는 문제가 생깁니다.


이를 해결할수 있는 방법이 있을까 구글을 검색해 보고 몇가지를 시도해 보고 잘 되는 방법이 있어서 포스팅합니다.


기준은 Cocos2d-x 3.0 RC0 이지만, 다른 버전도 별 차이는 없을거라 생각합니다.


먼저, AppController.mm 파일을 엽니다. (ios 그룹에 있습니다.)


엔트리 포인트인,


- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

.

.

.



- (BOOL) myApplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

.

.

.


으로 바꿉니다.


이제 아래의 코드를 추가합니다.


- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {

return [self myApplication:application didFinishLaunchingWithOptions:launchOptions];

}

return YES;

}


- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

if ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) {

return [self myApplication:application didFinishLaunchingWithOptions:launchOptions];

}

return YES;

}


이게 끝입니다.


결과를 볼까요?




스크린샷 가지고 알수가 없지요..==; 이건 동영상으로 보여 드려야 하는데.... 그냥 깜박이지 않고 잘 나옵니다.


이 작업만으로 7.0 이상에서도 깜빡임 없이 런치 이미지를 필요한 만큼 길게 가져갈 수 있습니다. (물론 첫번째 씬은 런치 이미지를 보여주고 처리하는 씬이어야 겠지요.)





끝.