我正在开发 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) {
}
答案 0 :(得分:0)
groupIndex和滤波器位的要点是使灯具完全相互忽略,所以你所描述的听起来是正确的。如果你想让两个灯具给你BeginContact / EndContact回调,你必须设置groupIndex和filter位来允许它。您可以在此处查看默认检查的完成方式:{{3}}
您可以创建自己的b2ContactFilter子类来自定义此行为(使用b2World :: SetContactListener告诉世界使用您的自定义类)。