2016-06-03 3 views
0

나는 다른 스프라이트 경계 상자는, 내가 원하는하지 않기 때문에 이벤트 리스너를 작성하여 sprite bounding box가 cocos2dx의 다른 스프라이트 바운딩 박스에 완전히 있는지 감지하는 방법은 무엇입니까? 스프라이트 경계 상자 측면에 완전히 경우

bool GameScene::onContactBegin(cocos2d::PhysicsContact &contact) 

가 false를 반환 사용한 적이 이벤트 리스너가 아니라 충돌을 감지하지만 감지 할 어떤 종류의 충돌 물리학이라도 처음 접촉했을 때만 발동됩니다.

나는 때문에 빠르고 정확한 내 목적을 위해 물리학을 사용하고 싶습니다. 어떤 아이디어 ??

auto spriteA = dynamic_cast<Sprite*>(contact.getShapeA()->getBody()->getNode()); 
auto spriteB = dynamic_cast<Sprite*>(contact.getShapeB()->getBody()->getNode()); 

스토어 그 충돌의 :

std::vector<std::pair<coco2d::Sprite*, cocos2d::Sprite*>> collisionVector; 

당신은 이런 식으로 접촉에서이 충돌 스프라이트 객체를 얻을 수 있습니다이를 달성하기

답변

0

한 가지 방법은 벡터에 충돌 스프라이트를 저장하는 것입니다 어느 스프라이트도 null가 아닌 경우는 벡터. 물리 접촉을 할 때마다이 작업을 수행하십시오. 이제 update() 함수에서 이것을 사용하여 충돌을 확인할 수 있습니다. 충돌이 발생하면 사용자 지정 이벤트를 발생시킬 수 있습니다. 충돌이 끝났거나 스프라이트를 삭제 한 경우 업데이트 기능을 사용하여 목록을 정리할 수도 있습니다.

충돌을 확인하려면 각 스프라이트의 경계 상자를 가져 와서 비교해야합니다. 당신과 같이 경계 상자를 얻을 수 있습니다 :

cocos2d::Rect boundingBox = sprite->getBoundingBox(); 

이제 상자의 네 모서리가 다른 상자 내에 있는지 확인하기 위해 테스트에 의해 서로에 대한 두 boundingBoxes을 확인 할 수 있습니다. Rect의 containsPoint() 함수를 사용하여이를 수행 할 수 있습니다.

void onCollisionInside(Sprite* spriteA, Sprite* spriteB) 
{ 
    //do something 
} 
: 당신이 boundingBoxs 다른 하나 내부에 발견하면

마지막으로, 사용자 지정 충돌 이벤트를 발생