libgdx box2d флип составное тело

Привет, у меня составной кузов box2d, который предназначен для автомобиля, видимого в профиль. когда он идет назад, я бы хотел, чтобы он смотрел в другую сторону, т.е. переворачивал/отражал по оси x. есть ли простой способ сделать это? Я ничего не нахожу в Google, хотя много ложных попаданий из-за другого использования отражения слов.

Я мог бы воссоздать тело, но мне пришлось бы делать все несвоевременное удаление/добавление? и это кажется немного громоздким. я пробовал body.getFixtureList и устанавливал вершины, но метод tyhe помечен, не меняя список. это значит не добавлять удалять? или не редактировать? В любом случае на экране ничего не меняется. Вышел, чтобы перепроверить мой код...

Я что-то упускаю?


person user3473715    schedule 04.04.2014    source источник


Ответы (1)


Изменение вершин не сработает. Единственная возможность сделать это - воссоздать тело, как вы сказали. И не думайте, что он будет медленным только потому, что вам придется его удалить, а затем создать заново. Box2d, вероятно, мог бы создать 100 ваших автомобилей в одном кадре без особых усилий.

И для всего процесса переворачивания вы должны масштабировать компонент x вершин на -1. И если начало вашей вершины не было в центре формы, вам пришлось бы отрегулировать координату x всего транспортного средства (или просто правильно разместить начало координат).

Также при воссоздании тела вы, вероятно, захотите сохранить линейную и угловую скорость исходного тела. А затем, как только вы создадите новый, примените эти скорости к новому телу. Если вы этого не сделаете, вы заставите свой автомобиль замерзнуть, как только вы сделаете флип.

person Justas Sakalauskas    schedule 04.04.2014
comment
получить вершины с помощью getVertex и сбросить их не работает. Кажется, что восстановление массива вершин и выполнение shape.set(newShape) работает. Я борюсь с проблемой происхождения. - person user3473715; 04.04.2014
comment
Как я уже сказал, это не сработает. Вы должны удалить все тело и создать его снова с перевернутыми вершинами. - person Justas Sakalauskas; 04.04.2014
comment
Вам нужно воссоздать только приспособления, а не все тело. Вы также можете постоянно иметь два набора приборов на теле и отключить один из них (установить биты маски столкновения и плотность на ноль для неактивных приборов и т. д.) в зависимости от текущей ориентации. Не забудьте также ResetMassData, если вы это сделаете. - person iforce2d; 05.04.2014