Java 什么';s JBox2D和libGDX-Box2D之间的区别

Java 什么';s JBox2D和libGDX-Box2D之间的区别,java,libgdx,jbox2d,Java,Libgdx,Jbox2d,我正在开发libGDX,并在游戏中使用它进行简单的2D物理交互。然而,最近我发现了一个图书馆的存在称为 这两个图书馆有什么不同吗?两者的优点是什么 我知道他们都是基于C++的库的,因为: 在LBGDX中的Box 2D实现是围绕C++引擎的一个瘦java封装。p> BOJX2D是C++物理引擎的一个java端口,CyfFun和Box 2D.< 但是,港口和包装是什么意思?JBox2D是否比Box2D更完整?哪一个更快 我问这个问题是因为我想知道将我的项目从一个更改为另一个(在本例中是从Box2

我正在开发libGDX,并在游戏中使用它进行简单的2D物理交互。然而,最近我发现了一个图书馆的存在称为

这两个图书馆有什么不同吗?两者的优点是什么

我知道他们都是基于C++的库的,因为:

在LBGDX中的Box 2D实现是围绕C++引擎的一个瘦java封装。p>


BOJX2D是C++物理引擎的一个java端口,CyfFun和Box 2D.< 但是,港口和包装是什么意思?JBox2D是否比Box2D更完整?哪一个更快


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

正如MadProgrammer所说,libgdx Box2D扩展(gdx-Box2D)是本地Box2D库的JNI包装器。而JBox2D库完全是用Java编写的,不依赖于本机库。但是,您可能会发现,当无法包装本机库时,在幕后了解这一点很有趣。这仅适用于GWT后端

在大多数情况下(特别是Android),使用JNI包装器而不是JBox2d更快(在iOS上也可能更快,因为RoboVM需要翻译JBox2d字节码)。这就是扩展在这些后端上使用它的原因。当然,这取决于实际场景,因此您应该对其进行基准测试和比较,以了解实际差异

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


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

包装意味着它们是一个精简的(基本上没有功能的)API,这使得从Java调用底层API更加容易。它基本上充当Java和(大概)本机实现之间的代理。端口是实际代码从C++翻译成java的地方,因此移植的版本变成(大概)纯java,不依赖任何外部的本地图书馆,这使得端口慢了一点?有时不会。该端口更容易在多个平台上运行,因为您无需担心是否安装了正确的库,例如,它也不会遇到诸如平台(OS)上的更新库之类的问题,这可能会导致问题。我必须学会如何进行基准测试(这对我来说是个新词),将我的游戏从一个库移植到另一个库,然后测量两者的时间/性能是否算作基准?或者有关于如何进行基准测试的标准?除非您试图解决一个实际(性能)问题,并且您实际发现box2d导致了该问题,并且您验证了这不是您自己的代码的问题(例如误用API),否则您甚至不应该考虑这一点。首先确定问题,然后尝试解决。不要试图解决可能存在或不存在的问题。