C ++ Box2D - динамические тела, на которые не влияет гравитация, если их оставить в покое

Я играл с Box2D в SFML2 и понял; когда я изменяю гравитацию мира, динамические тела, которые какое-то время оставались нетронутыми, не затрагиваются изменением гравитации. Я подготовил видео, чтобы сделать это объяснение более понятным.

Любые решения? Должен ли я создавать собственную гравитацию и почему это происходит?

Это видео. Обратите внимание, что если тела некоторое время не двигаются, на них не влияют те, которые были перемещены недавно.


person Community    schedule 22.12.2012    source источник
comment
+1 хороший вопрос собирался задать и нашел это!   -  person David Kroukamp    schedule 19.01.2013


Ответы (1)


Объекты в Box2D засыпают после того, как они останавливаются. После изменения таких параметров, как гравитация, вам придется разбудить спящие объекты, вероятно, вызвав WakeUp для всех объектов. Объекты также автоматически пробуждаются, когда с ними что-то сталкивается, поэтому кажется, что гравитация начинает действовать после того, как что-то сталкивается с объектом.

person yiding    schedule 22.12.2012
comment
Как бы я это сделал? Итерация? Или есть хорошая команда мира, чтобы разбудить их всех? - person ; 22.12.2012
comment
да, вы можете перебрать все объекты и вызвать WakeUp. Вы также можете создать мир с набором параметров noSleep. Вы также можете создавать объекты с allowSleep, установленным в false. - person yiding; 22.12.2012
comment
Идеально! Кстати, новая версия B2D вызывает метод SetAwake(bool) :3 - person ; 22.12.2012
comment
Ах, на самом деле я не использовал Box2D с тех пор, как он впервые появился в 05-06 годах. - person yiding; 22.12.2012
comment
Нет проблем, вы определенно указали мне правильное направление! - person ; 22.12.2012