Для игры в libgdx
с box2d
я хотел бы иметь возможность позволить Player
присесть. Crouching должен изменить свой Fixture
на 1 * 1m hitbox вместо 0.5 * 2m hitbox.
Одна из возможностей - сохранить 2 Body
, один для нормального и один для приседания. Тогда, если Player
хочет припасть, я мог бы удалить первое Body
из World
и добавить второе Body
, но этот способ кажется сложным для такой легкой задачи. Есть ли более простая возможность сделать это?
благодаря
Как вы говорите, одним из способов решения этого было бы наличие обоих тел.
В частности, вы можете установить фильтры на соответствующие светильники. Затем вы сможете использовать альтернативные фильтры для "освобождения"/"включить" соответствующее из столкновений.
Помните, что, как JavaDoc для setFilterData
говорит:
Задайте данные фильтрации контактов. Это не будет обновлять контакты до следующего шага времени, когда какое-либо родительское тело будет активным и бодрствующим. Это автоматически вызывает Refilter.
Для получения дополнительной информации см. Раздел 9.5 "Фильтрация контактов" из руководства box2d (это для реализации C++, но должно быть достаточно ясно для вас, чтобы получить общее изображение) и вышеупомянутых фильтров JavaDoc.
EDIT: в отношении комментария - для бонуса вы также можете установить "неиспользуемое" тело для сна.
Что касается Mass
, поскольку вы не упомянули об этом, я предположил, что вы используете box2d только для коллизий.
Но если это не так - ну, вам нужно будет проверить, что работает в вашей симуляции и соответствующим образом скорректировать. Например, "более широкий" прямоугольник (т.е. "стоячий" hitbox) может получить больший вращательный импульс при попадании в конечность.
В "массовом" случае вы также должны рассмотреть возможность использования Joint, например WeldJoint, для "синхронизации" ваших двух hitboxes.
Body
активны одновременно, но у одного естьFilter
столкновений, который отфильтровывает все столкновения, в то время как другой не использует фильтр. И если я переключаюсь, я только swith фильтр? Но имеют ли 2Body
с одинаковымиMass
иVolume
(в данном случае только двумерное лицо) одинаковую физику, чтобы моделирование Box2D возвращало одинаковые результаты?