группы коллизии box2d

Если у вас есть ObservableList объектов, и вы изменяете свойства внутри этих объектов, уведомление не применяется, поскольку коллекция не изменяется напрямую. Я заставляю уведомление после изменения свойств моего объекта, используя Insert (), чтобы повторно добавить мой измененный объект в коллекцию, затем RemoveAt (), чтобы удалить старую копию. Это не красиво, но работает.

10
задан ekad 3 December 2017 в 11:42
поделиться

1 ответ

Из руководства Box2D :

6.2.3. Фильтрация

Фильтрация столкновений - это система для предотвращение столкновения фигур. Например, вы создаете персонажа который едет на велосипеде. Вы хотите велосипед, чтобы столкнуться с местностью и персонаж столкнется с местность, но вы не хотите персонаж столкнется с велосипедом (потому что они должны перекрываться). Box2D поддерживает такую ​​фильтрацию столкновений с использованием категорий и групп.

Box2D поддерживает 16 столкновений категории. Для каждой формы вы можете укажите, к какой категории он принадлежит. Вы также указываете, какие еще категории эта форма может столкнуться с. Для Например, вы можете указать в многопользовательская игра, в которой все игроки не сталкиваются друг с другом и монстры не сталкиваются с каждым другое, но игроки и монстры должны столкнуться. Это делается с помощью маскировки биты. Например:

 playerShapeDef.filter.categoryBits = 0x0002;
monsterShapeDef.filter.categoryBits = 0x0004;
playerShape.filter.maskBits = 0x0004;
monsterShapeDef.filter.maskBits = 0x0002;

Группы столкновений позволяют указать интегральный групповой индекс. Вы можете иметь все фигуры с одинаковым индексом группы всегда сталкиваются (положительный индекс) или никогда не сталкиваться (отрицательный индекс). Группа индексы обычно используются для вещей которые как-то связаны, например части велосипеда. В следующих например, shape1 и shape2 всегда сталкиваются, но shape3 и shape4 никогда столкнуться.

 shape1Def.filter.groupIndex = 2;
shape2Def.filter.groupIndex = 2;
shape3Def.filter.groupIndex = -8;
shape4Def.filter.groupIndex = -8;

Столкновения форм разных групповые индексы фильтруются по биты категории и маски. В других слов, у групповой фильтрации выше приоритет, чем фильтрация категорий.

15
ответ дан 3 December 2019 в 13:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: