Фильтрация столкновений Box2D с одновременными столкновениями - PullRequest
0 голосов
/ 13 января 2012

Я использую Box2DWeb 2.1a, прямой порт Box2DFlash.

Я использую контактные фильтры (b2FilterData), устанавливая категорию и биты маски. Это работает отчасти, но есть некоторое раздражающее поведение, которого я не ожидал. Когда предметы, которые не должны сталкиваться, также находятся в контакте с другим объектом, с которым они должны сталкиваться, эти объекты также сталкиваются друг с другом. Я не хочу этого, но не могу понять, как от него избавиться.

Я создал b2ContactFilter с методом ShouldCollide, который является точной копией метода b2ContactFilter.prototype.ShouldCollide для распечатки значений категории и битов маски при контакте. Когда происходят ошибочные коллизии, я заметил, что filter1.categoryBits и filter1.maskBits становятся 0x0001 и 0x65535 соответственно. Это как если бы b2FilterData был новым экземпляром, или b2Body был назначен новый экземпляр b2FixtureDef. Хотя я не знаю, почему это произошло.

1 Ответ

0 голосов
/ 18 ноября 2012

Вы уверены, что правильно назначаете b2FilterData?Его следует применять к b2Fixture, а не к b2FixtureDef.Если вы делаете:

var myData = new b2FilterData();
myData.maskBits = ~0x0004;

fixture.m_filter = myData;

Попробуйте вместо:

fixture.SetFilterData(myData);

Если вы получаете сообщение об ошибке SetFilterData, это означает, что вы вызываете его не для b2Fixture, а для b2FixtureDef, чтоне так.

Это помогло вообще?

...