box2D 정리

2023. 3. 14. 19:39cocos2dx

#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 처리에 렉이 걸려서 제대로 처리가 안 되기 때문이다.
돌아가는 애들이 아무 속도 감소 요인도 없는데 알아서 속도가 감소하더라.