이건 그냥 기록을 위해 살짝...

내부적으로 버전관리중인 v0.3-3.7.2 버전의 테스트를 진행중입니다. 뭔가 안정적으로 구현되는 게 하나라도 있어야 버전업을 할 텐데...

 일주일 넘게 매달린 것 같은데 아직 2차, 3차 충돌 판정에서 오류가 나타나고 있습니다. 현재 나타나는 주요 문제점은 2콤보, 3콤보 판정이 가끔 수 초간 지연되어 표시되는 점입니다. 일단 지연 판정이 생기면 그 뒤 판정은 대부분 함께 지연되는지라 머리가 아프네요. 충돌체크의 경우 이미 제가 1차로 구현한 방법에서 한참은 더 들어가버렸기 때문에(이미 제가 한 건 거의 흔적도 남지 않았죠) 오늘 중으로 리드 프로그래머의 친절한 주석이 달려야 소스 짜집기를 시전할 수 있을듯 합니다.

전 오늘 구현 가능한 기타 요소 및 문서화 작업에 몰두해야겠네요. 
Posted by As Kafka
안녕하세요.

cocos2d 프로젝트와 트위터를 연동하는 방법을 간단하게 정리해볼까 합니다. 하지만 이 방법은 iOS5에서 정상적으로 실행되지 않으니 참고만 해주셨으면 좋겠네요. 혹시 xcode4.2 + ios5 조합에서 제대로 연동에 성공한 분이 계시다면 의견 부탁드립니다.

뭐가 문제였는지 모르겠지만 처음부터 다시 하니 xcode4.2 + ios5에서도 잘 되네요;;;;;


먼저, 제가 참고한 소스들입니다. 저는 저 소스들로부터 짜집기 해서 제가 원하는 결과물을 얻었습니다.

http://www.iphil.co.uk/index.php/2011/02/integrating-twitter-and-cocos2d-oauth/
https://github.com/bengottlieb/Twitter-OAuth-iPhone
http://www.playngive.com/blog/2010/5/2/twitter-integration-with-cocos2d-and-twitter-oauth-iphone.html
http://www.icodeblog.com/2010/09/16/dealing-with-the-twitter-oauth-apocalypse/ 


제가 이번 글을 통해 구현하고자 하는 것은 버튼 클릭이나 특정 조건을 만족시켰을 경우 트윗 전송 메서드가 호출되어 특정 메시지를 자동으로 전송해주는 것입니다. 버튼만 누르면 묻지도 따지지도 않고 그냥 정해진 문자를 트윗하는 거죠.

그럼 먼저 필요한 준비물부터 챙깁시다.

2번째 링크에서 파일을 다운받습니다. 왼쪽 상단에 ZIP 이라고 돼있는 버튼을 누르시면 되겠습니다. 그리고 압축파일에 있는 Twitter+OAuth 폴더를 프로젝트로 드래그해서 추가합니다.

 
그리고 프레임워크에 libxml2.dylib 파일을 추가합니다.  기본 리스트에 없으면 add other에서 아래 경로의 파일로 수동 지정 해줍니다. 저는 ios5에서 했습니다.
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib


 다음으로는 Header Search Paths 에 아래 경로를 추가해줍니다.
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/include/libxml2

 

다음으로는... 아래 링크로 가서 앱을 등록하고 컨슈머 키와 시크릿 키값을 받습니다.
https://dev.twitter.com/apps




이제 코드 만지기 전에 할 일은 끝났습니다. 프로젝트의 AppDelegate를 수정할 차례군요. 헤더파일로 갑시다.


#import <UIKit/UIKit.h>

#import "SA_OAuthTwitterController.h"

#import "SA_OAuthTwitterEngine.h"


@class RootViewController;

@class SA_OAuthTwitterEngine;


@interface AppDelegate : NSObject <UIApplicationDelegate, SA_OAuthTwitterControllerDelegate> {

UIWindow *window;

RootViewController *viewController;

    SA_OAuthTwitterEngine *_engine;

}


@property (nonatomic, retain) UIWindow *window;

-(void) twitterAccountLogin;


@end


SA_OAuthTwitterEngine 관련이랑  twitterAccountLogin 메서드 부분만 추가해주시면 됩니다.
추가하셨으면 이제 AppDelegate.m 부분으로 갑니다. 메서드 추가해야죠 ㅎ_ㅎ
요로코롬 추가합니다. define 에는 위에서 받은 키값들을 넣어주세요.

#define kOAuthConsumerKey @"컨슈머 키값"

#define kOAuthConsumerSecret @"컨슈머 시크릿값"


-(void) twitterAccountLogin {

    UIViewController *controller = nil;

    if (!_engine) {

        _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self];

        _engine.consumerKey = kOAuthConsumerKey;

        _engine.consumerSecret = kOAuthConsumerSecret;

        

        controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self];

    }

    

    if (controller)

    {

        NSLog(@"트윗 실패!!");

        [viewController presentModalViewController: controller animated: YES];

    }

    else {

        NSLog(@"트위터는 트윗트윗 하고 웁니다 _");

        [_engine sendUpdate: [NSString stringWithFormat: @"@asreanet 짱멋짐 >.<"]];

    }

}



그리고 여러분의 프로젝트에 메서드를 추가해줍니다. 추가하실때 AppDelegate 임포트 잊지마시고요.
메서드 호출하는 부분은 적당히 앱 디자인에 맞춰 추가하시면 됩니다. 저는 임시로 게임오버 메서드 안에다 [self twitter]; 이렇게 추가했네요.

  -(void) twitter {
  [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"postToTwitter"];

    [[NSUserDefaults standardUserDefaults] synchronize];


    AppDelegate *myApp = (AppDelegate *)[UIApplication sharedApplication].delegate;

    [myApp twitterAccountLogin];

}

 
이쯤 해서 실행하시면... 처음에 인증하고 메서드 두번째 호출부터 트윗이 되긴 되는데 계정 정보 저장이 안 되는 고로 앱을 껐다가 다시 켜면 새로 인증을 하게 되는 번거로움이 있습니다. 여기서 꼼수를 좀 씁시다. 

맨 아래쪽(4번째) 링크로 가신 다음 스크롤 쭉 내리시면 맨 밑에 소스파일을 다운받을 수 있는 링크가 있습니다. 거기서 tweet.h, tweet.m 파일만 가져와서 프로젝트에 추가합니다.

그리고... AppDelegate.h 에 한 줄 추가합니다.

NSMutableArray *tweets;

AppDelegate.m 에서는 아까 집어넣은 Tweet.h 임포트 하시고 아래 코드를 와장창 때려넣습니다.

고백컨데 다른 부분도 그렇지만 특히 이 부분은 어디서 무슨 기능을 하는지 잘 모른 상태에서 퍼와서 집어넣은 것입니다. 보시면서 이건 필요없겠다 싶은 부분은 과감히 지워주세요.
 


#pragma mark SA_OAuthTwitterEngineDelegate


- (void) storeCachedTwitterOAuthData: (NSString *) data forUsername: (NSString *) username {

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject: data forKey: @"authData"];

[defaults synchronize];

}


- (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) username {

return [[NSUserDefaults standardUserDefaults] objectForKey: @"authData"];

}


#pragma mark SA_OAuthTwitterController Delegate


- (void) OAuthTwitterController: (SA_OAuthTwitterController *) controller authenticatedWithUsername: (NSString *) username {

NSLog(@"Authenticated with user %@", username);

tweets = [[NSMutableArray alloc] init];

//[self updateStream:nil];

}


- (void) OAuthTwitterControllerFailed: (SA_OAuthTwitterController *) controller {

NSLog(@"Authentication Failure");

}


- (void) OAuthTwitterControllerCanceled: (SA_OAuthTwitterController *) controller {

NSLog(@"Authentication Canceled");

}


#pragma mark MGTwitterEngineDelegate Methods


- (void)requestSucceeded:(NSString *)connectionIdentifier {

    

NSLog(@"Request Suceeded: %@", connectionIdentifier);

}



- (void)receivedObject:(NSDictionary *)dictionary forRequest:(NSString *)connectionIdentifier {

    

NSLog(@"Recieved Object: %@", dictionary);

}


- (void)directMessagesReceived:(NSArray *)messages forRequest:(NSString *)connectionIdentifier {

    

NSLog(@"Direct Messages Received: %@", messages);

}


- (void)userInfoReceived:(NSArray *)userInfo forRequest:(NSString *)connectionIdentifier {

NSLog(@"User Info Received: %@", userInfo);

}


- (void)miscInfoReceived:(NSArray *)miscInfo forRequest:(NSString *)connectionIdentifier {

NSLog(@"Misc Info Received: %@", miscInfo);

}

 

 

 여기까지 하시면 정상적으로 되긴 되실텐데 아마 경고가 좀 있을 겁니다. 최종적으로 하실 일은...
MGTwitterEngine 에 있는 MGTwitterXMLPhaser.h 에다가 
<NSXMLParserDelegate요거 하나 추가해주시면 되겠습니다.


이렇게 해주시면... 모든, 또는 대부분의 경고가 사라집니다.

동작 테스트 결과 잘 되네요. xcode4.1에서 작업하고 4.2에서 구동하니 잘 안 되던데 아예 처음부터 4.2에서 작업하니 잘 되는군요;;;

긴 글 읽어주셔서 감사합니다. 복받으실 거에요 ~_~



 
Posted by As Kafka


추가적으로 구현된 것이 없지는 않지만 전반적으로 모든 것이 불안정하고, 안정적인 구현과 최적화에 대부분의 에너지를 쏟아붓고 있습니다.

운석을 날려보냄으로서 생기는 2차 충돌 체크는 아직도 정확도가 애매하게 98%정도이고(이런 건 100%가 아니면 곤란하니까요) SNS 연동을 구현해놨더니 xcode4.2 + ios5 조합에서는 4개의 처음보는 경고와 함께 구현이 안 되는 상황입니다. DB나 게임센터 연동은 작업 진행중이고요.

큰 난관이고, 전반적인 일정 및 게임 디자인 수정까지도 생각하고 있습니다. 그나마 수확이라면 위 짤방 정도.
Posted by As Kafka


어려움에 봉착한 상황입니다. 충돌체크나 시간지연 이벤트 구현에 어려움이 있어서 갖은 방법을 동원하는 중입니다.


일단 어제 날짜로 올린 0.3 버전의 변경사항은 다음과 같습니다.


- 스코어 숫자 이미지 파일로 구현(LabelAtlas)

- 시작 애니메이션 추가(고양이 올라오고 'Ready?'문구가 내려왔다 올라감)

- 다중충돌, 콤보 구현(불완전, 진행중)

- 충돌시 화면 흔들리는 효과(불완전)

- 화면 좌측에 게이지바 구현(게이지 점멸과 함께 랜덤 이벤트 발동)


전체적으로 깔끔하게 구현되는 부분이 별로 없습니다. 대부분은 그래도 보정작업을 좀 해주면 나아질 것 같은데 다중충돌에 따른 콤보 시스템 구현은 문제가 제법 존재합니다. 여러 종류의 객체가 같은 충돌 RECT를 공유하기 때문에 생기는 문제같은데… 10번에 한번꼴로 잘못된 충돌 판정을 내립니다. 현재 이 문제를 해결하기 위해 이틀째 전력을 다하고 있고 물리엔진(Box2D)를 이용하는 방법도 검토중입니다. 아직 구현할 게 많은데 의외의 곳에서 발목을 잡히네요;


제 절친이자 이번 작품의 그래픽 디자이너 Gasfard에게서 주인공 디자인(겸 팀 마스코트) 시안을 이번 주 내로 받기로 했습니다. 멋진 결과물 기대중 ㅇ_ㅇ!


다음 주에는 슬슬 DB 작업에 돌입해야 하는데 지금 쌓여있는 문제들이 빨리 해결됐으면 좋겠습니다.

Posted by As Kafka
생각보다 코드 최적화에 시간이 많이 걸려서 예정되어 있던 작업이 다소 늦추어졌고, 간단히 구현할 수 있는 다른 것들을 구현하는 것으로 대신하였습니다.

오늘 소스정리 후 v0.2로 관리할 예정입니다.
 - 스코어 구현(불완전)
 - 게임오버(재시작과 메인메뉴로 가는 것 중 선택 가능)
 - 운석 크기, 이미지, 프레임수 재조정(렌더링 이미지 사용, 50프레임, 58* 58 해상도)
 - 코드 최적화
 
Posted by As Kafka
이전버튼 1 2 3 이전버튼

블로그 이미지
서둘지 말되 멈추지도 말라 SIN PROSA SIN PAUSA
As Kafka

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함