2023. 3. 14. 19:39ㆍcocos2dx
#1. Box2D 관련 include
include 단은 크게 손 댈게 없다.
external\
external\box2D\include를 추가해 주고 (아마 external은 원래 있었지 싶은데)
chipmunk관련 include가 눈에 띄면 없애 준다.
(cocos2d 엔진의 기본 물리 엔진은 chipmunk이다)
#2. define 정리
기본적으로 Chipmunk로 셋팅된 프로젝트를 Box2D로 변경해 주는 과정이 필요하다.
지금 프로젝트와 libcocos2d 프로젝트 모두의 Preprocessor Definition에서
CC_ENABLE_CHIPMUNK_INTEGRATION 를 0으로 바꿔주고
CC_ENABLE_BOX2D_INTEGRATION 를 1으로 바꿔줘야 한다.
(아마 CC_ENABLE_CHIPMUNK_INTEGRATION 부분만 지워도 될 거 같긴 하지만)
그리고 ccConfig.h (PhysicsSprite를 불러오다 보면 쉽게 찾아질 것)의 define부분도
칩멍크를 끄고 박스2D를 켜 놓자.
#3. Collision Listener는 직접 만들어서 써야 한다.
그래야 충돌 이후 후처리 함수를 따로 사용 가능하기 때문. 충돌에 사용한 Collider의 구조를 보면
#4. 이와 같이 PhysicsSprite를 상속받아서 사용하게 만들었다.
써 보니까 알아서 물리 위치따라 스프라이트 위치 잡아주더라.
다만 삭제할 때 까지 스마트하게 삭제되진 않음.
#5. Dynamic body 예시.
난 항상 공의 속도가 일정하길 원해서 이와 같이 설정했다.
#6. Static body 예시.
충돌시에 깨질 블록이다.
Update Priority는 씬의 업데이트보다 늦게 처리했는데,
물리 world 업데이트 이후에 삭제되야만 하기 때문이다.
(Scene에서는 scheduleUpdateWithPriority(0) 해 줄 것)
#7. 물리 world, 화면을 둘러싸는 박스, 만들어 놓은 충돌체들 생성 처리.
PTM_RATIO를 사용하는 이유는,
물리 세계의 크기가 일정 이상 크기를 넘어가면(float임에도 불구하고!)
box2D 처리에 렉이 걸려서 제대로 처리가 안 되기 때문이다.
돌아가는 애들이 아무 속도 감소 요인도 없는데 알아서 속도가 감소하더라.
'cocos2dx' 카테고리의 다른 글
action)callfuncN을 이용한 트릭 (0) | 2023.03.14 |
---|---|
cocos2d observer pattern : notification center (0) | 2023.03.14 |
ffmpeg && cocos2d 동영상 플레이어 (0) | 2023.03.14 |
좌우가 연속되는 배경 횡스크롤 (0) | 2023.03.14 |
애니메이션 재생후 셀프삭제, using schedule, CardinalSpline (0) | 2023.03.14 |