상세 컨텐츠

본문 제목

cocos2d-x Physics Contact 관련

개발생활/Cocos2d

by 한국인맛집 2017. 9. 20. 20:29

본문

반응형

cocos2dx 에서 Physics 객체들끼리 충돌을 체크하기 위해선


EventListnerPhysicsContact 이벤트를 생성해주어야한다.



사용의예


auto colide = EventListenerPhysicsContact::create();

colide->onContactBegin = std::bind(&Unit::physicsContact,this,std::placeholders::_1);

_eventDispatcher->addEventListenerWithSceneGraphPriority(colide, this);




함수를 Bind 해서 이벤트 등록을 진행해줘야한다.


그리고 충돌을 확인할 Physics 객체들간


BitMask를 입력해주고 bind 할 함수에서 충돌체크를 진행해주어야한다.




예)

PhysicsBody* a = PhysicsBody::createBox(Size(20,20));

a->setCollisionBitmask(TAG_VALUE_FIRST);


a->setContactTestBitmask(TAG_VALUE_FIRST);


PhysicsBody* b = PhysicsBody::createBox(Size(30,30));


b->setCollisionBitmask(TAG_VALUE_SECOND);


b->setContactTestBitmask(TAG_VALUE_SECOND);


/*
각클래스 에서 지정하여도되며 인스턴스를 생성하고 PhysicsBody에 비트마스크 값을  지정해도무관하다.

(단 비트마스크 값은 16진수 값으로 지정할것. )

*/


bind 함수 사용예제

bool HelloWorld::physicsContact(PhysicsContact& c) {


PhysicsBody* aBody = c.getShapeA()->getBody();

PhysicsBody* bBody = c.getShapeB()->getBody();

if (aBody->getContactTestBitmask()  == TAG_VALUE_FIRST&& 

                                          bBody->getContactTestBitmask() ==

 TAG_VALUE_FIRST_SECOND) {

bBody->removeFromWorld();

return false;

}

if (bBody->getContactTestBitmask() == TAG_VALUE_FIRST&&

       aBody->getContactTestBitmask() == 
TAG_VALUE_FIRST_SECOND) {


  aBody->removeFromWorld();


return false;


}


return true;

}



바인드를할 함수의 내용중에서 ShapeA 와 shapeB 가 있다. 하지만 


어떤것이 A가 되고 B될지 알수없다.


그래서 A일경우 B일경우 지정해줘야한다. 그리고 위코드는 충돌할시 


TAG_VALUE_SECOND 인 PhysicsBody 를 삭제해주는 코드이다.


return false 를 이유는 충돌한 객체들간 통과 즉 oneWay를 위해.


return 값을 false 로 지정해주었다. 만약 return true 로 지정하면.


각객체들간 충돌이 발생하고 충돌했을시의 restitution 이나 잠시 멈춤현상이 발생할것으로 판단되어 충돌할시 

각 PhysicsBody 간은 충돌되지 않도록 하였고 충돌판단시 삭제로 진행하였다.


반응형

'개발생활 > Cocos2d' 카테고리의 다른 글

Cocos2d-x Camera  (0) 2017.10.20
Cocos2d-x Camera Option 관련.  (0) 2017.10.19
Localzation 관련.  (0) 2017.10.12
Physics Basic - 2  (0) 2017.08.23
Cocos2d-X , Physics Basic  (0) 2017.08.21
cocos2dx Create Project  (31) 2017.07.27

관련글 더보기