В чем разница между JBox2D и libGDX Box2D
Я работаю над libGDX и использую Box2D для простых 2D физических взаимодействий внутри моей игры. Однако недавно я обнаружил существование библиотеки под названием JBox2D.
Есть ли разница между этими двумя библиотеками? В чем преимущества одного от другого?
Я знаю, что они оба основаны на библиотеке Box2D для C++ из-за этого:
Реализация Box2D в libgdx - это тонкая оболочка Java вокруг движка C++.
JBox2d - это порт Java физических движков C++ LiquidFun и Box2d.
Но что они подразумевают под портом и упаковкой? Является ли JBox2D более полным, чем Box2D? какой из них быстрее?
Я спрашиваю об этом, потому что хочу знать, может ли изменение моего проекта с одного на другой (в данном случае с Box2D на JBox2D) повлиять или оптимизировать производительность моей игры.
1 ответ
Как сказал MadProgrammer, расширение libgdx box2d (gdx-box2d) представляет собой оболочку JNI вокруг собственной библиотеки box2d. Хотя библиотека JBox2D полностью написана портом на Java и не опирается на нативную библиотеку. Однако вам может быть интересно узнать, что расширение gdx-box2d использует JBox2d за кулисами, когда невозможно обернуть нативную библиотеку. Который является единственным случаем для бэкэнда GWT.
В большинстве случаев (особенно для Android) быстрее использовать JNI-оболочку вместо JBox2d (вероятно, это также быстрее в iOS, поскольку RoboVM необходимо преобразовать байт-код JBox2D). Вот почему расширение использует это на этих бэкэндах. Конечно, это зависит от этого фактического сценария, поэтому вы должны сравнить и сравнить его, чтобы узнать реальную разницу.
Я сам не ставил gdx-box2d против JBox2d. Но по опыту могу сказать, что JNI-оболочка gdx-bullet (3D-физика) намного быстрее по сравнению с Java-портом JBullet.
Обратите внимание, что gdx-box2d включает в себя необходимые библиотеки. Это не зависит от каких-либо библиотек на платформе, которые необходимо обновить. Вам также не нужно беспокоиться о том, что установлены правильные библиотеки.