我应该使用哪个 Box2DJavaScript 库?

有一些不同的端口 盒子2D的 JavaScript。哪一个是最好的?

  • Box2DJS -“以自动方式从 Box2DFlashAS3.1.4.3.1转换”

  • Box2Dflash 2.0移植到 JavaScript -“一个大的讨厌的黑客恰好可以工作”

  • Box2dweb -“将 Box2DFlash 2.1 a 的一个端口转换为 JavaScript。我开发了一个 ActionScript3-to-JavaScript 转换器来生成代码

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

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

如果有的话,知道 http://chrome.angrybirds.com/使用哪个版本吗?

36055 次浏览

Note to readers!

This question was originally asked and answered in 2011, but I'll do my best to keep it up to date!

Here's what I've found:

  • kripken/box2d.js is a port of Box2D using Emscripten and works well and is fast. I have used this personally with great success.
  • planck.js is the newest port and is written from the ground-up in JavaScript
  • Box2DJS is a port of Box2DFlash 1.4.3.1. box2dweb is a port of version 2.1a.
  • Box2DJS works "as a CommonJS module without any modifications at all" [1]
  • Box2DJS "not up-to-date and you have to import a big amount of JavaScript files in every project" [2]
  • box2dweb is contained in a single file [2]
  • box2dweb is "a much newer port and has a lot fewer issues" than Box2DJS [3]. However, switching might introduce new issues [4].
  • Box2DJS depends on Prototype but box2dweb does not [5]
  • Seth Ladd has promoted box2dweb with examples on his blog [6]
  • Nobody seems to be using the third alternative.
  • There are also physics simulators not based on Box2D. Check out Matter.js and p2.js

There's also a similar discussion on gamedev.stackexchange.com.

I'd say that the winner is kripken/box2d.js.

This question and its best answer are from 2011. One recent new option is box2.js, an Emscripten translation of the C++ code to Javascript. As of August 2013 it's more up-to-date than the other ports I've found, and the demos seem to work.

Probably the best place to keep up to date with Box2D JavaScript ports is the official forum: http://box2d.org/forum/viewforum.php?f=22

JSBox2D looks like a good start.

I would definitely have a look into Matter.js, which seems very well built and very quick. I'm going down this path. http://brm.io/matter-js

Box2DWeb supports most of the API from the original C++ Box2D except chain shapes. :/

It is the most widely used Javascript Box2D. If you need the API documentation for Box2DWeb, check out Box2DFlash. http://www.box2dflash.org/docs/2.1a/reference/

Box2DWeb is auto generated from Box2DFlash using a compiler. So the API is the same.

I doubt Box2DWeb will get any update in the future anymore as Box2DFlash has shown no activities anymore. You can see the author's rational on why he decided not to write a direct Box2D --> Box2DWeb port.

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

LiquidFun (With JS Bindings)

LiquidFun is, at the time I'm posting this, the most recent port to JS. It has all the features of Box2D and liquid physics features. It's ported using emscripten, so performance is decent.

google/liquidfun

google/liquidfun/tree/master/liquidfun/Box2D/lfjs

Box2d-html5 is also another box2d port including Google's LiquidFun) and active update.