Libgdx Box2D меняет форму светильника Bodys

1

Для игры в libgdx с box2d я хотел бы иметь возможность позволить Player
присесть. Crouching должен изменить свой Fixture на 1 * 1m hitbox вместо 0.5 * 2m hitbox.
Одна из возможностей - сохранить 2 Body, один для нормального и один для приседания. Тогда, если Player хочет припасть, я мог бы удалить первое Body из World и добавить второе Body, но этот способ кажется сложным для такой легкой задачи. Есть ли более простая возможность сделать это?

благодаря

Теги:
libgdx
shape
box2d

1 ответ

1
Лучший ответ

Как вы говорите, одним из способов решения этого было бы наличие обоих тел.

В частности, вы можете установить фильтры на соответствующие светильники. Затем вы сможете использовать альтернативные фильтры для "освобождения"/"включить" соответствующее из столкновений.

Помните, что, как JavaDoc для setFilterData говорит:

Задайте данные фильтрации контактов. Это не будет обновлять контакты до следующего шага времени, когда какое-либо родительское тело будет активным и бодрствующим. Это автоматически вызывает Refilter.

Для получения дополнительной информации см. Раздел 9.5 "Фильтрация контактов" из руководства box2d (это для реализации C++, но должно быть достаточно ясно для вас, чтобы получить общее изображение) и вышеупомянутых фильтров JavaDoc.


EDIT: в отношении комментария - для бонуса вы также можете установить "неиспользуемое" тело для сна.

Что касается Mass, поскольку вы не упомянули об этом, я предположил, что вы используете box2d только для коллизий.

Но если это не так - ну, вам нужно будет проверить, что работает в вашей симуляции и соответствующим образом скорректировать. Например, "более широкий" прямоугольник (т.е. "стоячий" hitbox) может получить больший вращательный импульс при попадании в конечность.

В "массовом" случае вы также должны рассмотреть возможность использования Joint, например WeldJoint, для "синхронизации" ваших двух hitboxes.

  • 0
    Таким образом, вы имеете в виду, что оба Body активны одновременно, но у одного есть Filter столкновений, который отфильтровывает все столкновения, в то время как другой не использует фильтр. И если я переключаюсь, я только swith фильтр? Но имеют ли 2 Body с одинаковыми Mass и Volume (в данном случае только двумерное лицо) одинаковую физику, чтобы моделирование Box2D возвращало одинаковые результаты?
  • 0
    @Springrbua: по сути, да. Я отредактировал ответ для решения вашей другой проблемы.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню