cosos2d-box2d的isSensor方法没有给出冲突

时间:2014-01-25 10:29:43

标签: box2d cocos2d-x

我正在开发 box2d physics 游戏。因为我正面临一个时间间隔的小问题,我使用group-index使我的物理体对其他物理体透明。这很好用。但是,在某些情况下,我想知道一些b2体与其他身体发生碰撞/重叠。为此,我尝试使用b2fixture的 isSensor属性,但我没有透明体的碰撞。

我的问题是,是否有必要让所有的身体都是传感器?

我怎样才能解决这个问题?

MyContactListner.mm

#import "MyContactListener.h"
#import "cocos2d.h"
MyContactListener::MyContactListener() : _contacts() {
}

MyContactListener::~MyContactListener() {
}

void MyContactListener::BeginContact(b2Contact* contact) {
    MyContact myContact = { contact->GetFixtureA(), contact->GetFixtureB() };
    _contacts.push_back(myContact);
}

void MyContactListener::EndContact(b2Contact* contact) {
    MyContact myContact = { contact->GetFixtureA(), contact->GetFixtureB() };
    std::vector<MyContact>::iterator pos;
    pos = std::find(_contacts.begin(), _contacts.end(), myContact);
    if (pos != _contacts.end()) {
        _contacts.erase(pos);
    }
}

void MyContactListener::PreSolve(b2Contact* contact, 
                                 const b2Manifold* oldManifold) {
}

void MyContactListener::PostSolve(b2Contact* contact, 
                                  const b2ContactImpulse* impulse) {
}

1 个答案:

答案 0 :(得分:0)

groupIndex和滤波器位的要点是使灯具完全相互忽略,所以你所描述的听起来是正确的。如果你想让两个灯具给你BeginContact / EndContact回调,你必须设置groupIndex和filter位来允许它。您可以在此处查看默认检查的完成方式:{​​{3}}

您可以创建自己的b2ContactFilter子类来自定义此行为(使用b2World :: SetContactListener告诉世界使用您的自定义类)。