반응형

cocos2d v3에는 기본적으로 Chimpunk가 내장되어 있다. 충돌을 했을 때 이벤트 처리를 하기 위해서 이리저리 삽질하다가 알아낸 결과. 이상하게 구글링을 해도 제대로된게 안나온다. 


헤더 파일에 자세하게 나와있는데 감이 안오다가. 구현하고 나서 헤더 파일을 보니 이제야 알겠음.


physicsBody에서 collisionGroup이 같으면 같은놈으로 취급하여 충돌시키지 않는다. 반대로 생각해서 계속해서 통과해서 오랜시간 삽질. 기본적으로 nil값으로 무조건 충돌시킨다. 


가장중요한건 collisionType. collisionType 에 부여된 이름에 따라서 delegate에서 호출하는 메소드 명이 달라진다. 여기서도 오랜시간 삽질. 기본값은 default 이다. 하지만 ccPhysicsCollisionBegin:typeA:typeB로 되어 있어서 삽질. 

ccPhysicsCollisionBegin:default:default 로 변경을 하거나 아니면 collisionType 에 부여된 이름처럼 아래와 같이 메소드 명을 변경한다. 



@interface GameScene : CCScene <CCPhysicsCollisionDelegate>


  _physics.collisionDelegate = self;


  water.physicsBody.collisionType = @"water";

  leap.physicsBody.collisionType = @"leap";

  frog.physicsBody.collisionType = @"frog";


-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair typeA:(CCNode *)nodeA typeB:(CCNode *)nodeB{

  return YES;

}



-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair water:(CCNode *)nodeA frog:(CCNode *)nodeB{

  CCLOG(@"collison frog");

  return YES;

}


-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair frog:(CCNode *)nodeA leap:(CCNode *)nodeB{

  CCLOG(@"collison leap");

//  [nodeB removeFromParent];

  return YES;

}




이건 헤더 파일의 일부분. 

/**

 *  Is this body a sensor? A sensor will call a collision delegate but does not physically cause collisions between bodies.

 *  Defaults to NO.

 */

@property(nonatomicassignBOOL sensor;


/**

 *  The body's collisionGroup, if two physics bodies share the same group id, they don't collide. Defaults to nil.

 */

@property(nonatomicassignid collisionGroup;


/**

 *  A string that identifies the collision pair delegate method that should be called. Default value is @"default".

 */

@property(nonatomiccopyNSString *collisionType;


/**

 *  An array of NSString category names of which this physics body is a member. Up to 32 unique categories can be used in a single physics node.

 *  A value of nil means that a body exists in all possible collision categories.

 *  The deefault is nil.

 */

@property(nonatomiccopyNSArray *collisionCategories;


/**

 *  An array of NSString category names that this physics body wants to collide with.

 *  The categories/masks of both bodies must agree for a collision to occur.

 *  A value of nil means that this body will collide with a body in any category.

 *  The default is nil.

 */

@property(nonatomiccopyNSArray *collisionMask;



반응형
Posted by KraZYeom

댓글을 달아 주세요

반응형

cocos2d-iPhone 게임을 안드로이드로 포팅시 그냥 아무런 옵션 없이 컴파일을 하면 갤럭시 노트 3와 같은 고해상도 단말에서는 아주 작게 나타난다. 이것을 해겨 하기 위해서 아래 코드를 앱이 실행 될 때 넣어주면 된다. 


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

{

#ifdef ANDROID

  [UIScreen mainScreen].currentMode = [UIScreenMode emulatedMode:UIScreenBestEmulatedMode];

#endif

...


}



반응형
Posted by KraZYeom

댓글을 달아 주세요

반응형

열풍 적인 인기를 얻고 있는 Flappy Bird ... 광고가 너무 자주 나와서! cocos2d v3 를 공부할 겸해서 따라 만들어 보기로 했습니다. 


* 이미지 및 저작권은 원 개발자에게 있습니다. 개인적인 습작 용도로만 사용하세요. 직접 배포할 때는 이미지는 제외합니다. 

* 저는 소스코드 권리만 있습니다. ;-) 

* 한 5일정도 출근전 퇴근후 해서 야금야금 코딩한게 완성. :-) 

- 여기서 소소한 광고 - 

드래곤 라이더 따라 만들기! 를 사시면 쉬운 게임은 그냥 만들 수 있어요~ -_ -;



Flappy Bird도 걍 배낀거였구나. ㅠㅠb 배낀게 나쁘게 보지는 않는다. 때와 운이 작용해야 한다. 


2월 12일 월요일 07시 39분 

SpriteKit으로 포팅 완료. 

화면 캡쳐 및 트윗 완료. 

zOrder는 zPosition으로 줘야 한다. insertSubview:atIndex로 해서 오랫동안 삽질을... 

order값 주는 과정에서 레이어를 왔다갔다 하다가 계산산 scale값을 0 이 되서... 한참 동안 삽질.

* 사운드가 하나 이상하게 재생된다. -_ -; 이건 뭐 내 탓이 아니오! 





2월 10일 월요일 23시 56분 

빅토르 안이 동메달 딴 기념으로.. 심심해서 우울증엔 코딩이 최고져...; 

간단한 코드이기에 SpriteKit 으로 포팅 마음 먹고 삽질에 삽질을 해서 대충 75%정도 구현은 된 듯.

SpriteKit이 지원하는게 딱히 많이 없어서 내일 자세히 살펴봐야 할 듯. 

* cocos2d도 CCActionMove, SpriteKit도 SKAction move가 적용되어 있으면 스프라이트가 position으로 이동하지 않는다. 이걸로 몇 분 잡아 먹은듯. 





2월 8일 토요일 23시 41분 

점수 + 화면 트위터 공유 기능 추가. :-) 9줄이면 되다니. 몇 분만에 후다닥. 구글+스텍오버플로우님께 감사의 말을..

참조 : http://stackoverflow.com/questions/19721779/how-to-take-screenshot-in-cocos2d-iphone 

이젠 정말 그만 둬야지 




2월 8일 토요일 18시 48분

완성. NSUserDefault 사용해서 걍 점수 관리. highScore는 하나 밖에 없으니.

적당하게 소스 다듬고 공개. 




2월 8일 토요일 16시 46분

iOS -> OS X 으로 걍 소스만 복&붙 했더니. 사이즈 계산 방법 때문에 이런저런 문제가 많아서 걍 아이 5 사이즈로 보이게 설정. 
.xib 열고 싸이즈 적당하게 수정하고 resize를 안되게 막아야함. 
잘됨. 그런데 v3 문제인지 잘꺼짐. ㅠ 




2월 8일 토요일 16시 19분

전체 화면으로 보면 대충 게임 로직이 눈에 보입니다. -_ -; 




2월 8일 토요일 16시 04분

Cocos2d v3 for Mac 을 사용해서 포팅 완료. 근데 엄청 문제가 많다. v2로 옮겨서 해볼까...; 

심지어 커널 패닉까지 일어남. ㅠㅠ 




2월 8일 토요일 14시 10분

이런 저런 버그 잡음. 화면에 밖에 나가면 메모리에서 삭제 해야하는데 안해서. Array에서만 삭제했는... 

밖으로 뛰쳐 나가는 버그 잡은... (딸이 싫어하겠지만..) 

코드 좀 정리. 메소드 하나에 뭉쳐넣은거나 빼야하는데...; 


* 최고 점수 및 점수에 따른 메달 부여만 하면 끝.




2월 8일 토요일 08시 42분

사운드 적용 했음. SimpleSoundEngine 이 없어지고 v3에서는 OALSimpleAudio로 변경되었음. 사용법은 거의 똑같음. 

몇 가지 버그가 존재함. 하늘 경계선을 넣자. 

동영상을 보면 sprite 갯수가 계속해서 늘어나는데 뭔가 다시 삭제를 안하고 있는 듯. 




2월 8일 토요일 03시 05분

나름 대충 게임 원본 스타일과 거의 비슷하게 완성 한 것 같습니다. 사운드만 입혀주고 마지막에 점수 에니메이션만 살짝 넣어주면 되겠네요. 게임에 ㄱ 도 모르고 코딩을 하는지라 제대로 효율적으로 구현한지는 모르겠습니다. 




2월 7일 금요일 09시 38분

뭔가 물리엔진으로 통통 새를 튀게 하기 힘들다. 

원래 앱과도 다른 느낌.. 걍 Chipmunk 들어내고 시간에 따라 걍 위로 아래로 움직이게 바꿈.

나름 원래 앱과 비슷비슷하다. 만족! 


* 삽질 : OS X 상의 시뮬레이터 OpenGL 성능과 iPhone 기기의 OpenGL ES 성능이 달라서... 시뮬레이터 상에서는 프레임이 30프레임이하로 떨어저서 버버버벅인다. 아래 동영상 처럼 iPhone 에서 돌리니 60프레임 나와서 부드럽게 동작.

그렇다고 내가 OpenGL을 직접 건들이는건 아님 -_ - cocos2d에서 하는거라... 




2월 6일 금요일 23시 16분

파이프 추가. 파이프에도 물리값 주기 그러면 자동으로 충돌이 구현된다. 하지만 튕김.




2월 5일 수요일 23시 05분

Chipmunk 물리엔진 새와 바닥에 적용. 뭔가 impulse, force 값을 줘서 통통 튀게 했지만 통통까지는 마음에 드는데...

계속해서 통통하면... 가속도 값을 조정하는거라 이상하게 날아감. 




2월 5일 수요일 21시 42분

버튼을 클릭하는 느낌을 주긴했는데 꼼수라서 뭔가 이상함.

그리고 게임씬으로 이동 추가




2월 5일 수요일 21시 39분

버튼을 클릭하는 느낌을 주긴했는데 꼼수라서 뭔가 이상함.

그리고 게임씬으로 이동 추가




2월 4일 화요일 09시 50분

일단 메뉴 화면에 새와 타이틀의 애니메이션만 넣기



반응형
Posted by KraZYeom

댓글을 달아 주세요

  1. 2014.02.06 17:01  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. 이선임 2014.02.08 22:02  댓글주소  수정/삭제  댓글쓰기

    멋지네요. 역시 슈퍼개발자-!!

  3. 보땡 2014.02.17 03:14  댓글주소  수정/삭제  댓글쓰기

    안녕하세요? 플라피 버드 연재 잘 보았습니다.
    cocos2d v3 CCAnimaition 에 변화가 생긴건지 선언조차 되지않던데... 혹시 그렇지는 않으셨나요?
    v3를 잘못설치한건지 ㅜㅜ

반응형

VertexHelper https://github.com/jfahrenkrug/VertexHelper

box2d(or Chipmunk) 에서 사용할 vertex를 자동으로 생성해 주는 툴


png 파일의 투명부분을 인식해서 자동으로 외곽선을 따라서 vertex를 생성해줍니다. 


반응형
Posted by KraZYeom

댓글을 달아 주세요

반응형

iPhone 5 전용 배경화면 패치


iPhone 4S, iPhone 4에서는 아무런 문제가 없다. 

iOS에서는 *.png와 *@2x.png 로 이미지를 레티나용이냐 아니냐로 구분한다. cocos2d에서는 @2x 대신에 -hd를 사용하여 구분한다. 


iPhone 5는 세로가 1136이고 iPhone 4S이하는 960이기 때문에 배경화면을 기존 -hd로 설정을 하면 공백이 생긴다.


해결을 위해서 cocos2d를 살짝 수정을 해서 iPhone 5전용 이미지를 지원하도록 패치하도록 한다. 



“AppDelegate.m” 파일로 이동을 한다. (BOOL)application:didFinishLaunchingWithOptions:launchOptions 메소드에서 아래 코드 부분을 찾는다. 


[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"]; // Default on iPhone RetinaDisplay is "-hd"


이 부분에서 파일 확장자에 따른 이미지를 구분하게 해준다. 이 부분을 살짝 고쳐주면 iPhone 5 전용 이미지 지원이 가능하다. 

setiPhoneRetinaDisplaySuffix 의 정의로 이동한다. Cmd와 왼쪽 버튼을 클릭해도 정의로 이동한다.



-(void) setiPhoneRetinaDisplaySuffix:(NSString *)suffix

{

[_suffixesDict setObject:suffix forKey:kCCFileUtilsiPhoneHD];

}


// 1.

// iPhone 5 전용 이미지 지원

-(void) setiPhone5RetinaDisplaySuffix:(NSString *)suffix

{

[_suffixesDict setObject:suffix forKey:kCCFileUtilsiPhone5HD];

}


1. iPhone 5 전용 이미지 지원을 위해서 기존 메소드를 복사 붙여넣기 해서 메소드 이름을 변경을 하고, forKey를  kCCFileUtilsiPhone5HD 로 변경한다. 


“CCFileUtils.h” 로 이동한다. 

-(void) setiPhoneRetinaDisplaySuffix:(NSString*)iPhoneRetinaDisplaySuffix;

아래 부분에 위에 추가한 메소드를 아래와 같이 정의 한다. 

-(void) setiPhone5RetinaDisplaySuffix:(NSString*)iPhoneRetinaDisplaySuffix;


그리고 다시 “AppDelegate.mm” 파일로 이동한다.

  // 1.

  [sharedFileUtils setiPhone5RetinaDisplaySuffix:@"-5hd"]; // Default on iPhone 5 RetinaDisplay is "-5hd"


  1. iPhone 5 전용 이미지를 -5hd를 사용하여서 지원하도록 한다. 

이렇게 하면 -5hd를 사용해서 iPhone 5, -hd를 사용해서 iPhone 4S, iPhone 4 그리고 아무것도 붙이지 않고 iPhone 3GS 이하로 구분해서 배경화면을 설정 할 수 있다.

패치한 파일 

반응형
Posted by KraZYeom
TAG cocos2d, Patch

댓글을 달아 주세요