JBox2D和libGDX Box2D有什么区别

Ale*_*tes 3 java jbox2d libgdx

我正在研究libGDX,并在我的游戏中使用Box2D进行简单的2D物理交互.但是,最近我发现存在一个名为JBox2D的库.

这两个图书馆有什么区别吗?彼此之间的优势是什么?

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

libgdx中的Box2D实现是围绕C++引擎的瘦Java包装器.


JBox2d是C++物理引擎LiquidFun和Box2d的Java端口.

但是,他们的意思是端口和包装?JBox2D比Box2D更完整吗?哪一个更快?

我问这个是因为我想知道将我的项目从一个改为另一个(在这种情况下从Box2D到JBox2D)可以影响或优化我的游戏性能.

Xop*_*ppa 7

正如MadProgrammer所说,libgdx box2d扩展(gdx-box2d)是一个围绕本机box2d库的JNI包装器.虽然JBox2D库是完全用Java编写的端口,但不依赖于本机库.但是,您可能会发现有趣的是,当无法包装本机库时,gdx-box2d扩展在后台使用JBox2d.这只是GWT后端的情况.

在大多数情况下(特别是Android),使用JNI包装器而不是JBox2d更快(在iOS上它可能也更快,因为RoboVM需要转换JBox2D字节码).这就是扩展使用那些后端的原因.当然这取决于实际情况,因此您应该对它进行基准测试并比较它知道实际差异.

我自己没有替补标记gdx-box2d和JBox2d.但我可以从经验中说,与JBullet Java端口相比,(3D物理)gdx-bullet JNI包装器要快得多.

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

  • 除非你有一个实际的(性能)问题,你试图解决*和*你实际上发现box2d导致了这个问题*并且*你确认它不是你自己的代码的问题(例如滥用API),你不应该甚至想想这个.首先确定问题,然后尝试解决.不要试图解决可能存在或可能不存在的问题. (3认同)