0

我是 Box2D 的新手,正在使用 EaselJS 和 Box2DWeb 进行第一个项目。我希望拥有标准的静态形状,包括世界的墙壁和地板,以便在调整大小时与浏览器窗口一起移动/更新。我正在使用 SetPosition 来完成它,每次执行 Easel 的 tick 方法都会调用它——它几乎可以工作了。当浏览器变大时,一切都按预期工作 - 地板降低,动态对象相应下降。

然而,当浏览器变小时,场景中的物体似乎经常会穿过静态地板体并消失。似乎只有在调整大小足以导致相关动态主体短暂下降到窗口视图之外(例如,在降低高度时完全低于浏览器窗格)时才会发生。但是,如果我相当缓慢地调整浏览器的大小......奇怪的是它可以工作。

我想不出任何好的解决方案来解决我的问题,而且我没有任何运气在网络上找到该行为的示例。可以做到吗?非常感谢任何帮助。

李:

绝对 - 非常感谢您的回复。这是一个backbone.js 项目。这个例子可以在这里看到:

http://kensonger.com/b2dweb/

基本的窗口调整大小监听器位于文件底部:

/b2dweb/js/routers/Main.js

...它引用了 app.box2d。这是这里的主干视图:

/b2dweb/js/views/Box2DView.js

'onStageResize' 方法是定位世界边界。此类底部的更新方法通过 /b2dweb/js/routers/Main.js 中的 tick 方法调用 45/sec。

整个工作的一个拉链被压缩在这里:

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

如果您快速向上调整浏览器窗格的大小,然后再快速向下调整,您可以看到 box2d/画架对象穿过地板。如果您不向下调整大小,则对象只会掉下来并消失。但是,如果您这样做,地板会再次穿过并接住掉落的物体。

再次感谢一百万的任何见解 - 非常感谢。

4

1 回答 1

0

好吧,嘿,看起来我现在才刚刚开始工作 - 我让每个世界边界都相当于 1000 像素厚,并且对于每个元素,我在实例化时调用 SetActive(true)。我还没有确定是哪一个改变起到了作用,但我认为是那个 SetActive 调用。

http://kensonger.com/b2dweb/

如果有人知道更好的解决方案,请随时发布,我会尝试...

于 2013-02-21T01:37:04.473 回答