我应该使用哪个Box2D JavaScript库?

94
有几个针对JavaScript的Box2D端口。哪一个是最好的?
  • Box2DJS - “自动转换自Box2DFlashAS3_1.4.3.1”

  • Box2Dflash 2.0转移到JavaScript中 - “一个大而丑陋的黑客,碰巧能工作”

  • box2dweb - "将Box2DFlash 2.1a移植到JavaScript。我开发了一个ActionScript 3到JavaScript的转换器来生成代码"

  • HBehrens/box2d.js - “Box2D 2.1a的JavaScript版本”(添加于2011年11月21日)

  • kripken/box2d.js - “Box2D 2D物理引擎的JavaScript直接端口,使用Emscripten”(添加于2013年9月24日)

有任何想法http://chrome.angrybirds.com/使用哪个版本(如果有)吗?


1
它甚至不必是Box2D的移植。例如,Matter.js和p2.js似乎都非常稳定。 - Thomas
@Thomas 我同意。但是看看问题提出的时间。那时我相信Matter.js和p2.js还没有推出。 - newguy
1
可能吧,但我想这个问题在谷歌上已经出现过了...无妨试着提供一些有用的指引给那些在你之后遇到这个问题的人们,让SO保持最新。 :) - Thomas
6个回答

94

读者注意!

这个问题最初是在2011年提出和回答的,但我将尽力使其保持最新!

以下是我找到的:

  • kripken/box2d.js 是使用 Emscripten 移植的 Box2D,运行良好且速度快。我个人使用过,并获得了很大成功。
  • planck.js 是最新的移植版本,是从头开始使用 JavaScript 编写的。
  • Box2DJS 是 Box2DFlash 1.4.3.1 的移植版。box2dweb 是版本 2.1a 的移植版。
  • Box2DJS “作为一个 CommonJS 模块,在任何情况下都没有修改” [1]
  • Box2DJS “不是最新的,你必须在每个项目中导入大量的 JavaScript 文件” [2]
  • box2dweb 包含在单个文件中 [2]
  • box2dweb 比 Box2DJS “更新得多,问题也少得多”[3]。然而,切换可能会引入新的问题 [4]
  • Box2DJS 依赖于 Prototype,但 box2dweb 不依赖于它 [5]
  • Seth Ladd 在他的博客上推广了 box2dweb,并提供了示例 [6]
  • 似乎没有人使用第三种替代方案。
  • 还有一些基于 Box2D 的物理模拟器。请查看 Matter.jsp2.js

在gamedev.stackexchange.com上也有类似的讨论

我认为kripken/box2d.js是胜者。


box2d 不如 box2dweb 更新。许多核心类在压缩文件中都没有包含。 - dopatraman
1
我个人在一个项目中使用了box2dJS,将我的现有iOS box2D游戏移植过来。我发现版本差异的问题是,一些iOS代码在JS版本中无法工作,导致开发停滞。之后,我花了半周时间将所有代码更改为box2dweb,一切都像我的iOS box2d游戏一样正常工作。因此,版本差异非常重要。 - Makzan
Emscripten的端口非常酷,但上次我使用它时发现它很容易出现错误(包括随机冻结),而且由于Emscripten的性质,非常难以调试。 - bunnyhero
2
@aPaidNerd,这个还更新到最新版本了吗? - Ken
2
最近发布了一个名为planck的新Box2d移植JS物理引擎,快去看看吧:https://github.com/shakiba/planck.js - newguy

14

这个问题及其最佳答案来自2011年。一个近期的新选择是box2.js,它是将C++代码转换为JavaScript 的 Emscripten 项目。截至2013年8月,它比我发现的其他移植版本更为更新,并且演示似乎正常工作。


谢谢@Nelson,我已经将它添加到问题中了。 - a paid nerd
我没有使用这些库之一,但是box2d.js和“玩转VTables”听起来不太酷。 - cubuspl42

9

我最近发现了这个东西,它看起来非常适合模拟水流通过管道进入水箱和阀门等。对于我正在研究的项目来说,这将是一个很好的解决方案。是否有任何教程可以告诉我如何将库实际引入我的JavaScript中?文档似乎有点匮乏。 - Bob Haslett

7

1
Matter.js 对你有什么帮助? - David Y. Stephenson

4

1

Box2DWeb支持原始C++ Box2D的大多数API,但不支持链形状。:/

它是最广泛使用的Javascript Box2D。如果您需要Box2DWeb的API文档,请查看Box2DFlash。 http://www.box2dflash.org/docs/2.1a/reference/

Box2DWeb是使用编译器从Box2DFlash自动生成的。因此,API是相同的。

我怀疑Box2DWeb将不会再有任何更新,因为Box2DFlash已经没有任何活动了。您可以看到作者为什么决定不编写直接的Box2D -> Box2DWeb端口的理由。

https://code.google.com/p/box2dweb/wiki/Roadmap


目前来说,Box2D的下一个竞争者是PhysicsJS。wellcaffeinated.net/PhysicsJS/(个人意见)。 - Vennsoh
Google在2014年I/O大会上发布了一个插件,名为LiquidFun(去谷歌搜索)。使用它需要Box2D v2.3。它非常棒。 - Vennsoh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接