Изменить границы мира с изменением размера окна

Я новичок в Box2D и работаю над первым проектом, используя EaselJS вместе с Box2DWeb. Я надеюсь, что стандартные статические формы, составляющие стены и пол мира, будут перемещаться/обновляться вместе с окном браузера при изменении его размера. Для этого я использую SetPosition, который вызывается при каждом выполнении метода тика Easel — и он почти работает. При увеличении размера браузера все работает как положено - пол опускается и динамические объекты соответственно падают.

Однако, когда размер браузера уменьшается, кажется, что тела в сцене часто проваливаются сквозь статичное тело пола и исчезают. Кажется, это происходит только в том случае, если изменение размера достаточно велико, чтобы динамическое тело, о котором идет речь, ненадолго опускалось за пределы вида окна (например, полностью под панелью браузера при уменьшении высоты). Однако, если я изменяю размер браузера достаточно медленно... как ни странно, это работает.

Я не могу придумать хорошего решения своей проблемы, и мне не повезло найти пример поведения в Интернете. Можно ли это сделать? Очень благодарен за любую помощь.

Ли:

Абсолютно - большое спасибо за ответ. Это проект backbone.js. Пример можно увидеть здесь:

http://kensonger.com/b2dweb/

Базовый прослушиватель изменения размера окна находится внизу файла:

/b2dweb/js/маршрутизаторы/Main.js

... он ссылается на app.box2d. Это основной вид здесь:

/b2dweb/js/представления/Box2DView.js

Метод onStageResize устанавливает границы мира. Метод обновления в нижней части этого класса называется 45/сек через метод tick в /b2dweb/js/routers/Main.js.

Почтовый индекс всех усилий заархивирован здесь:

http://kensonger.com/b2dweb/box2d_experiment.zip

Вы можете увидеть объекты box2d/easel, проходящие сквозь пол, если вы быстро увеличите панель браузера вверх, а затем снова быстро уменьшите. Если вы не уменьшите размер, объекты просто провалятся и исчезнут. Однако, если вы это сделаете, пол снова пройдет сквозь него и поймает падающие предметы.

Еще раз, спасибо миллион за любые идеи - очень признателен.


person gomper    schedule 20.02.2013    source источник
comment
показать часть вашего кода, может быть?   -  person    schedule 20.02.2013
comment
Спасибо за быстрый ответ Ли! Я отредактировал свой пост выше, чтобы предоставить примеры кода. Единственные соответствующие биты находятся в Main.js и Box2DView.js - и если что-то не имеет смысла, просто дайте мне знать.   -  person gomper    schedule 20.02.2013


Ответы (1)


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

http://kensonger.com/b2dweb/

Если кто-то знает лучшее решение, пожалуйста, не стесняйтесь опубликовать его, и я попробую...

person gomper    schedule 21.02.2013