Как обнаружить столкновение, но не столкнуться в box2d?
Как определить, сталкивается ли тело с другим телом, но не реагирует на это столкновение.
По умолчанию я - обнаружение столкновения и тел сталкиваются.
Если я устанавливаю фильтр fixtureDef - тела не сталкиваются, но я не могу обнаружить столкновение.
Помогите пожалуйста!
Ответы
Ответ 1
Если прибор никогда не должен сталкиваться с чем-либо, вы можете сделать его датчиком. Если вам нужно столкнуться с некоторыми вещами, но не с другими, вы можете сделать контакт- > SetEnabled (false) в PreSolve слушателя столкновения, в зависимости от того, с чем он столкнулся.
Ответ 2
Что вы хотите здесь, это датчик на теле. Из руководства box2d:
Иногда игровая логика должна знать, когда два светильника перекрываются, но не должно быть ответа на столкновение. Это делается с помощью датчиков. Датчик - это прибор, который обнаруживает столкновение, но не дает ответа.
Вы можете отметить любое приспособление как датчик. Датчики могут быть статическими или динамическими. Помните, что у вас может быть несколько светильников на тело, и вы можете иметь любое сочетание датчиков и прочных светильников.
Датчики не создают контактные точки. Существует два способа получить состояние датчика:
- b2Contact:: IsTouching
- b2ContactListener:: BeginContact и EndContact
Вы можете установить прибор в качестве датчика, а затем записать его в свой прослушиватель контактов. Если у прибора есть флаг датчика, установленный в true, он предоставит данные о столкновении без физического имитации столкновения (т.е. Позволит вам протестировать перекрытие между ним любого другого встречного приспособления.)
Это полезное руководство по началу работы с датчиками учебник по датчику Ray Wenderlich