JBox2D 和 libGDX Box2D 有什么区别

What's the difference between JBox2D and libGDX Box2D

我正在研究 libGDX 并使用 Box2D for simple 2D physic interactions inside my game. However, recently I have found the existence of a library called JBox2D

这两个库有什么区别吗?两者的优势是什么?

我知道它们都是基于 c++ 的 Box2D 库,因为:

The Box2D implementation in libgdx is a thin Java wrapper around the C++ engine.


JBox2d is a Java port of the C++ physics engines LiquidFun and Box2d.

但是,端口和包装是什么意思? JBox2D 是否比 Box2D 更完整?哪个更快?

我问这个是因为我想知道将我的项目从一个更改为另一个(在本例中从 Box2D 更改为 JBox2D)是否会影响或优化我的游戏性能。

正如 MadProgrammer 所说,libgdx box2d 扩展 (gdx-box2d) 是原生 box2d 库的 JNI 包装器。而 JBox2D 库是在 Java 中完全编写的端口并且不依赖于本机库。但是,当无法包装本机库时,您可能会发现在幕后知道 the gdx-box2d extension uses JBox2d 很有趣。这只是 GWT 后端的情况。

在大多数情况下(特别是 Android),使用 JNI 包装器而不是 JBox2d 会更快(在 iOS 上可能也更快,因为 RoboVM 需要转换 JBox2D 字节码)。这就是扩展在那些后端使用它的原因。当然这个要看实际情况,所以你应该benchmark比较一下才知道实际的区别。

我自己还没有对 gdx-box2d 和 JBox2d 进行基准测试。但我可以根据经验说,与 JBullet Java 端口相比,(3D 物理)gdx-bullet JNI 包装器要快得多。

请注意,gdx-box2d 包含所需的库。它不依赖于平台上任何需要更新的库。您也不必担心确保安装了正确的库。