Erin Catto wrote:
The broad-phase uses enlarged AABBs to reduce the number of updates. Once you filter out a collision, you can't get the collision to be solid again until the objects move substantially. However, you can call b2Fixture::SetFilterData to trigger re-filtering.
From the manual:
Sometimes you might need to change collision filtering after a fixture has already been created. You can get and set the b2Filter structure on an existing fixture using b2Fixture::GetFilterData and b2Fixture::SetFilterData. Note that changing the filter data will not add or remove contacts until the next time step (see the World class).
Yes SetFilterData calls contact->FlagForFiltering on all contacts - but there is no contact for this collision so nothing to re-filter. Would I have to move the object off-screen then back the next step, to override this? Or can I remove it from the broad-phase list somehow? I'm not averse to changing the code I'm just not sure where to look.
Also, I notice you removed fixture.Refilter() - but there is another reason to refilter contacts other than changing filter data: custom code in the contact filter. In this case I have a one-way platform, and solidity is based on a combination of position and player input.