글

라벨이 GameCenter인 게시물 표시

Cocos2d-x iOS7 Presenting view controllers on detached view controllers is discouraged

이미지
Presenting view controllers on detached view controllers is discouraged <UIViewController: 0xc808560>.  전에 정리했던 Cocos2d-x iOS Game Center 연동 샘플소스 를 그대로 사용했더니 iOS7에서 위와 같은 로그와 함께 이후 뷰로 터치등이 먹통이 되는 증상이 발생했습니다. 단순히 아래와 같이 게임 센터 로그인 창에서 로그인을 안하고 Cancel 후  아래와 같이 showLeaderboard 기능을 하는 Close 버튼을 클릭해 리더보드를 한 번 호출하고 OK를 눌러 게임으로 돌아가는 순간부터 먹통이 되더군요. // Display another view controller as a modal child. Uses a vertical sheet transition if animated.This method has been replaced by presentViewController:animated:completion: - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 6_0);  iOS SDK에 위와 같이 있길래 아래와 같이 presentViewController로 해줬지만 해결되지 않았습니다. //[tempUIView presentModalViewController:pController animated:YES]; [tempUIView presentViewController:pController animated:YES completion:nil];  혹시나 해서 예전에 정리했던 RootViewController을 가져오기 해서 아래와 같이 했더니 잘 작동하네요. // 루트뷰에 하므로 ...

cocos2d-x iOS Sign in to Game Center 창이 안뜨는 현상

이미지
 iOS Game Center를 작업하다가 보면 위와 같이 사용자가 게임 센터에 로그인하지 않은 상태에서 게임을 실행하면 Sign in to Game Center Use Existing Account Create New Account Cancel  다이얼로그 창이 뜨게됩니다. 이때 Cancel을 누르고 나서 앱을 다시 실행하거나 하면 이 창이 아예 안 뜨는 증상이 있습니다. else if ( error != nil ) {         CCLOG ( "GameCenter Error %s %d" , [[error domain ] UTF8String ], [error code ]); }  이런식으로 로그를 찍었을 때 Cocos2d: GameCenter Error GKErrorDomain 2  위와 같은 에러 로그가 남습니다. 애플 개발자 센터 를 보면, GKErrorCancelled = 2, GKErrorCancelled The requested operation was canceled. Available in iOS 4.1 and later.  이런 에러 코드입니다.  구글링을 해보니 Cancel을 3번 했을 때 그 이후부터 다이얼로그가 안나온다고 하네요. 이는 애플 개발자 센터에도 없는 내용이라고 합니다. 뭐 예전 글들이라 지금은 업데이트 되었을 수도 있겠죠. 해결방법은 사용자에게 메세지를 띄워 게임센터 전용 앱에서 직접 로그인을 하도록 유도하는 것이겠죠.  개발자가 직접 메세지를 안 띄워줘도 3번째 Cancel일 때는 알아서 뜨게 됩니다. Game Center Disabled Sign in with the Game Center application to enable.  이런 창이 뜨죠. 친절하게 게임 센터 앱으로 로그인을 해서 활성화를 하라고 하네요. iOS 버...

cocos2d-x iOS Game Center Achievements 연동

이미지
 지난 포스팅에서 cocos2d-x에 iOS Game Center의 Leaderboard를 연동 했었습니다. 이번에는 도전과제인 Achievements를 연동하는 것을 정리해봅니다. 본격적인 작업에 앞서 링크에서 GameCenter 초기화 부분과 iTunes Connect에서 설정작업 이 되어 있다는 전제하에 진행합니다. 참고로 Leaderboard 작업분은 object-c로 진행했는데 Achievements는 class 선언과 구현부를 c++로 코딩했습니다. ///< GameCenter.h 파일 ///< 기존 GKLeaderboardViewControllerDelegate만 있던것에 GKAchievementViewControllerDelegate 추가해준다. NSObject < GKLeaderboardViewControllerDelegate ,  GKAchievementViewControllerDelegate > ///< GameCenter.mm ///< 도전과제 제출. pszAchievementId - 웹에서 추가한 도전과제ID void GameCenter ::reportAchievement( const char * pszAchievementId, float percent ) {     GKAchievement * pAchievement = [[[ GKAchievement alloc ] initWithIdentifier :[ NSString stringWithUTF8String :pszAchievementId]] autorelease ];          if ( pAchievement )     {         ///< 도전과제 진행률 설정     ...

cocos2d-x Game Center 연동. GKLeaderboardView를 띄워보자

이미지
cocos2d-x 프로젝트에 Game Center를 연동해 보겠습니다. 그전에 선행작업들 이 이미 끝나 있어야합니다. 먼저 GameKit.framework를 추가해줘야합니다. Project를 선택하고 TARGETS에서 개발중인 App선택 후 Build Phases탭을 선택합니다. Link Binary With Libraries를 선택 후 GameKit을 입력해 framework를 찾아 Add시킵니다. ios용 작업이기 때문에 프로젝트 네비게이터에서 ios폴더에 마우스 우클릭 -> New File을 선택합니다. 또는 command + n을 눌러도 됩니다. iOS -> Cocoa Touch -> Objective-C class를 선택합니다.  원하시는 Class 이름을 입력합니다. 저는 GameCenter.mm으로 입력했습니다. mm으로 한 이유는 cocos2d-x의 CCLOG와 CCMessageBox를 사용하기 위해서이구요 간단한 mm파일에 대한 설명을 링크 를 통해 확인하시기 바랍니다. Subclass of는 NSObject로 선택합니다.  저장 폴더를 선택합니다. ios로 설정해줬습니다. 프로젝트 네비게이터에 GameCenter.h와 mm 파일이 추가되었습니다. 이제 소스를 추가 및 수정합니다. HelloWorld 샘플에 붙이는 간단한 버젼입니다. GKLeaderboardViewController에 대한 처리만 되어있고 그외 GKAchievementViewController, GKMatchmakerViewController등은 없습니다. 자세한 개발 내용 참고는 iOS Developer Library 를 참고하세요. 그리고 제가 실수 했던 내용들도 포함해서 정리한 것이라 헷갈릴 수도 있겠습니다. 먼저 GameCenter.h #import  <Foundation/Foundation.h> #import  <G...

iOS Simulator 개발 테스트 중인 App 초기화나 파일 삭제를 해보자

이미지
저 같은 경우는 Game Center작업을 하던 중 이 상태에서 Cancel을 누르고 나서 종료 후 다시 Xcode에서 Run을 하니 죽어도 이게 안 뜨더라구요.... 리빌드도 해보고, iOS Simulator에서 App을 삭제를 해보고 다시 넣어서 해도 Sign in to Game Center가 되지 않더라구요. 소스 변경된 건 없는데...  해서 생각난게 iOS 개발은 샌드박스 어쩌고 하던게 생각나서 iOS 시뮬레이터에서 뭔가 지우고 초기화 하는게 있겠지 했는데, 있네요. Reset Content and Settings를 누르면 날릴꺼냐고 나오는데 Reset 눌러주면 그동안 깔려있던 App등 다 날라가버립니다. 다시 실행했더니 Sign in to Game Center도 잘 나와주고요~ 개별 App만 선택해서 날려주고 싶으시면 command + shift + G 키를 눌러 ~/Library/Application Support/iPhone Simulator 폴더로 이동하시고 그 다음으로는 개발중이신 버전을 선택 후 Applications 안에서 삭제할 App의 폴더를 지우면 됩니다. 이상한 숫자문자 조합의 디렉토리로 되어있는데 한번 들어가면 어떤 App인지 확인이 가능합니다.

Game Center 연동 전 iTunes Connect 설정하기

이미지
개발중인 App에 Game Center를 연동하려면 먼저 개발자 등록이 되어 있어야 함은 물론이고 선행작업으로는  개발 인증서 처리 나 Device 등록 및 App Id 생성 , iTunes Connect 등록 의 단계로 이것을 거쳐야만 준비가 일단락 되는 것이죠. 위 과정을 거쳤다면 iTunes Connect에 접속을 합니다. 초기 메인 화면에서 Manage Your Applications를 선택합니다. Game Center를 연동할 App을 선택합니다. App 정보가 나오는데 오른쪽 위의 버튼들 중 Manage Game Center를 선택합니다. Single Game용과 Group of Games용으로 Game Center를 Enable할 수 있습니다. 둘의 차이는 해당 App만 점수와 도전과제를 처리할 지 다른 App들도 공유하면서 처리할지인 듯 싶네요. 둘다 Enable할 수도 있구요. 일단 Enable for Single Game을 선택합니다. Game Center가 Enable되었습니다. 이제 전 세계 유저들의 점수를 비교하고 순위를 제공하는 점수판인 Leaderboard와 게임 내 도전과제에 해당하는 Achievements를 설정해줘야 합니다. 먼저 Add Leaderboard를 선택합니다. Leaderboard Type을 선택해야합니다. 처음에는 하나도 없는 상태이니 Single Leaderboard를 선택합니다. 추가할 Leaderboard 속성을 설정합니다. Leaderboard Reference Name : 개발자가 알 수있는 관리용 이름 Leaderboard ID : App에서 참조되는 값 Score Format Type : 위 스샷처럼 종류가 많습니다. 소수점없게 할지 있다면 몇자리까지, 아니면 시간값등으로 처리되게 할 수있네요. 선택한 것에 따라 Score Range 밑에 표현이 되니 참고하시면 됩니다. Sort Order : 오름차순, 내림...