반응형

cocos2d에서 iOS, Mac 으로 Antialis를 끄고 Apportable에서 안드로이드용으로 빌드를 하면 크래쉬 된다. 안드로이드에는 설정을 끄도록 하자. 이것 때문에 한 3시간 잡아 먹은듯. 


#ifdef ANDROID

#else

  [sprite.texture setAntialiased:NO];

#endif


반응형
Posted by KraZYeom

댓글을 달아 주세요

반응형

하나의 프로젝트에서 여러개의 플랫폼용으로 빌드 할 때, 아래 코드를 잘 조합해서 하면 하나의 소스로 여러개의 플렛폼으로 빌드를 할 수 있다. 


간단하게 설명.

1. workspace를 만든다. 

2. cocos2d iOS Project를 만든다. Add to, Group(처음 생성하는 프로젝트면 없을 수도 있다) 위치를 workspace root로 정한다. 



3. cocos2d Mac Project를 만든다. Add to, Group 위치를 workspace root로 정한다.  

4. 하나의 프로젝트에서 소스를 생성하고 다른 프로젝트로 옮길 때는 Project > Target > Build Phases > Compile Sources > + > Add Other ... > 원하는 소스코드 추가

(그냥 드래그 앤 드롭으로 하면 에러 남)

5. 소스 코드 외 컴파일 되지 않는 파일은 그냥 드래그 앤 드롭으로 하면 된다. copy는 하지 말고. 


그리고 소스 내부에는 아래 코드를 참조해서 apportable 용, iOS용, Mac 용을 구분해서 구현하면 된다. 


#ifdef ANDROID

#elif defined(__CC_PLATFORM_IOS)

#elif defined(__CC_PLATFORM_MAC)

#endif


반응형
Posted by KraZYeom

댓글을 달아 주세요

반응형

지난 이야기...;


다윤이와 함께 게임 만들기 - 게임 기획



몇 달이 지난건지 아무튼 지난 11월 말에 시작해서 한동안 정신이 없어서 방치하다가, 최근에 시간도 조금 생기고 cocos2d v3가 나와서 이리저리 필이 받아서 다시 진행. 


이미지 그려준게 너무 양이 적어서 뭔가 만들기 힘들다. 그리고 그림은 흑백이다. 점수만 넣고 배경 화면만 넣으면 대충 마무리 되는 듯. 

사운드는 아무거나 하나 따서 사용해야겠다. 내일 쯤 다윤이에게 선물로 줘야지. :-) 




반응형
Posted by KraZYeom

댓글을 달아 주세요

반응형

* 그냥 급하게 지원하게 코드만 수정한 버전입니다. 공식 버전에서 곧 지원될때 까지만 사용 바랍니다. 전체 코드를 몰라서 그냥 후다닥  지원 가능하게만 했은 성능상에 문제가 있을 수도 있습니다. 


어쩌다 보니 제 코드를 pull request 했더니 merge 되었네요. 

https://github.com/cocos2d/cocos2d-iphone/commit/1caaec05b967160c342fa92a9033909ab11f6edb


v3 rc2에서는 풀스크린을 하면 전체 확대가 안되었습니다. 이런 문제를 rc3에서 해결했는데 이것 때문에 다른 버그가 생겨버렸습니다.

cocos2d v3 rc 3에서 레니타 맥에 대한 패치가 있었는데요. 풀스크린상에는 문제가 없는데 작은 화면상에서는 화면이 2배 확대되어 나오는 버그가 발생합니다. 


CCDirector.m에서 아래와 같이 변경하면 됩니다.

-(void) setView:(CCGLView*)view{

...

{ // set size

CGSize size = CCNSSizeToCGSize(__view.bounds.size);

#ifdef __CC_PLATFORM_IOS

CGFloat scale = __view.layer.contentsScale ?: 1.0;

#else

self.view.wantsBestResolutionOpenGLSurface = YES// 이 부분 주석을 풀어줘야 함

CGFloat scale = self.view.window.backingScaleFactor;

#endif


CCDirectorMac.m에서 아래와 같이 추가하면 됩니다. 

- (void) setFullScreen:(BOOL)fullscreen {

...

    if( fullscreen ) {

...
        self.view.wantsBestResolutionOpenGLSurface = NO;

    } else {

...

       self.view.wantsBestResolutionOpenGLSurface = YES;

    }

...
}



반응형
Posted by KraZYeom

댓글을 달아 주세요

반응형


* 그냥 급하게 지원하게 코드만 수정한 버전입니다. 공식 버전에서 곧 지원될때 까지만 사용 바랍니다. 전체 코드를 몰라서 그냥 후다닥 Copy&Paste로 지원 가능하게만 했은 성능상에 문제가 있을 수도 있습니다. 



v2까지는 키보드 델리게이트를 사용해서 잘 먹었는데, 왜 v3에서는 빠졌는지 모르겠습니다. 추후 버전에서 지원이 될 거라고 생각합니다. Mac 에서는 기본적으로 키보드 게임이 어울리니까요. 


기본 템플레이트 파일을 빌드해서 키보드를 누르면 '딩' '딩' 소리만 스피커에서 나옵니다. 키 이벤트를 못 받는다는 소리라고 하네요. NSWindow에서 입력을 처리 하도록 할려니 잘 모르겠습니다. 그래서 cocos2d를 까니 mouse&touch 핸들러가 있어서 살짝 수정했습니다. 


CCGLView.m 파일 아래 쯤에 추가.

- (void) keyDown:(NSEvent *)theEvent {

  [[CCDirector sharedDirector].responderManager keyDown:theEvent];

}


- (void) keyUp:(NSEvent *)theEvent {

  [[CCDirector sharedDirector].responderManager keyUp:theEvent];

}



CCResponder.h 파일 아래 쯤에 추가.

- (void)keyDown:(NSEvent *)theEvent;

- (void)keyUp:(NSEvent *)theEvent;


CCResponder.m 파일 아래 쯤에 추가.

-(void)keyDown:(NSEvent *)theEvent{

  [[CCDirector sharedDirector].responderManager discardCurrentEvent];

}

-(void)keyUp:(NSEvent *)theEvent{

  [[CCDirector sharedDirector].responderManager discardCurrentEvent];

}


CCResponderManager.m 파일 아래 쯤에 추가. // 이 부분이 가장 난해해서 걍 적당히 소스를 고쳐서 사용했습니다. 

- (void)keyDown:(NSEvent *)theEvent{

  if (!_enabled) return;

  [[CCDirector sharedDirector].view.window makeFirstResponder:[CCDirector sharedDirector].view];


  if (_dirty) [self buildResponderList];

  

  // scan backwards through mouse responders

  for (int index = _responderListCount - 1; index >= 0; index --)

  {

    CCNode *node = _responderList[index];

    [node keyDown:theEvent];

  }

}


- (void)keyUp:(NSEvent *)theEvent{

  if (!_enabledreturn;

  [[CCDirector sharedDirector].view.window makeFirstResponder:[CCDirector sharedDirector].view];


  if (_dirty) [self buildResponderList];

  

  // scan backwards through mouse responders

  for (int index = _responderListCount - 1; index >= 0; index --)

  {

    CCNode *node = _responderList[index];

    [node keyUp:theEvent];

  }

}


이렇게 하고 키 이벤트를 받게 하고 빌드를 해서 실행을 하면 화면을 한 번 클릭을 하고 나서는 키 이벤트를 잘 받는데 클릭 전에는 이벤트를 받지 못합니다. 클릭을 한번 하면 GLView에서 이벤트를 받는데 그전에는 NSWindow에서 받아서 그런가 봅니다. 그래서 꼼수를 살짝.


AppDelegate.m 에서 아래와 같이 코드를 추가합니다. 걍 GLView에 한번 키 다운을 해주는 겁니다. ... 

  [_glView keyDown:nil];


이렇게 하면 다음 키 다운&업 이벤트를 잘 받습니다.


프로젝트 내에서 소스 코드를 수정하면 매번 프로젝트 생성때 마다 수정을 해줘야 하니.. 

~/Library/Developer/Xcode/Templates/ 디렉토리에서 위 파일에 맞는 곳을 찾아서 수정을 하면 기본 템플릿으로 설정이 됩니다. 

반응형
Posted by KraZYeom

댓글을 달아 주세요