我在桌面上遇到LibGDX的问题。尝试启动应用程序时,我始终收到以下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.badlogic.gdx.utils.BufferUtils.newDisposableByteBuffer(I)Ljava/nio/ByteBuffer;
at com.badlogic.gdx.utils.BufferUtils.newDisposableByteBuffer(Native Method)
at com.badlogic.gdx.utils.BufferUtils.newUnsafeByteBuffer(BufferUtils.java:288)
at com.badlogic.gdx.graphics.glutils.VertexArray.<init>(VertexArray.java:62)
at com.badlogic.gdx.graphics.glutils.VertexArray.<init>(VertexArray.java:53)
at com.badlogic.gdx.graphics.Mesh.<init>(Mesh.java:148)
at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:173)
at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:142)
at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:121)
at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:115)
我在项目中添加了以下库:
我想念什么吗?
我进行了上下搜索,但是找到的所有内容都是针对Android的,它告诉我将arm文件夹中的.so库添加到我的项目中,但是对于Wintel平台上的桌面项目而言,这对我来说没有任何意义。
我建议您使用this GUI设置项目。它应为您提供适用于所有平台的有效设置。您也可以使用最新的每晚版本,并检查问题是否仍然存在。问题可能是本地库与其他jar不匹配。
另一个问题可能是您实例化一个SpriteBatch(或其他内部使用SpriteBatch的实例)太早了(在stacktrace中看起来像这样)。例如静态地像这样:
private static SpriteBatch batch = new SpriteBatch();
这将不起作用,因为此时libgdx设置不正确。而是在游戏的create
/ show
方法中创建此类内容。
使用以下主要方法主体来启动对象
静态public void main(String [] args)引发异常{// SkeletonViewer.args = args;
String os = System.getProperty("os.name");
float dpiScale = 1;
if (os.contains("Windows")) {
dpiScale = Toolkit.getDefaultToolkit().
getScreenResolution() / 96f;
}
if (os.contains("OS X")) {
Object object = Toolkit.getDefaultToolkit().getDesktopProperty(
"apple.awt.contentScaleFactor");
if (object instanceof Float && ((Float) object).intValue() >= 2) {
dpiScale = 2;
}
}
if (dpiScale >= 2.0f) {
uiScale = 2;
}
LwjglApplicationConfiguration.disableAudio = true;
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.width = (int) (800 * uiScale);
config.height = (int) (600 * uiScale);
config.title = "Skeleton Viewer";
config.allowSoftwareMode = true;
config.samples = 2;
new LwjglApplication(new SampleApplication(), config);
}