COCOS2D-BOX2D的ISSENSOR方法不给出碰撞



我在 Box2D Physics 游戏上工作。因为我正面临一个小问题,这是时间间隔,我使用组索引使物理身体透明到其他物理身体。那很好。但是,在某些情况下,我想知道一些B2体与其他尸体碰撞/重叠。为此,我尝试使用B2Fixture的 ISSENSOR属性,但我没有得到透明的身体碰撞。

我的问题是,是否有必要使所有尸体成为true?

如何解决这个问题?

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) {
}

groupIndex和过滤器位的点是使固定装置彼此完全忽略,因此您所描述的声音正确。如果您希望两个固定装置给您启动/端口回调,则必须设置GroupIndex和filter Bits才能允许。您可以在此处查看如何完成默认检查:http://code.google.com/p/box2d/source/browse/browse/trunk/box2d/box2d/dynamics/b2worldcallbacks.cpp

您可以使自己的B2ContactFilter的子类自定义此行为(使用B2World :: SetContactListener告诉世界使用您的自定义类)。

最新更新