La generación de un nuevo proyecto con gdx-setup no crea un proyecto que se ejecuta debido a la antigua dependencia de lwjgl. Los síntomas de esto pueden ser mensajes de error como:
Exception in thread "LWJGL Application" java.lang.ExceptionInInitializerError
at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.setVSync(LwjglGraphics.java:558)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
at org.lwjgl.opengl.XRandR.findPrimary(XRandR.java:326)
at org.lwjgl.opengl.XRandR.ScreentoDisplayMode(XRandR.java:315)
at org.lwjgl.opengl.LinuxDisplay$3.run(LinuxDisplay.java:746)
at org.lwjgl.opengl.LinuxDisplay$3.run(LinuxDisplay.java:743)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.opengl.LinuxDisplay.init(LinuxDisplay.java:743)
at org.lwjgl.opengl.Display.<clinit>(Display.java:138)
... 2 more
AL lib: (EE) alc_cleanup: 1 device not closed
El motivo parece ser un mal análisis de la salida xrandr
en lwjgl 2.9, que es mejor en lwjgl 3.0.
Nota al margen: nos dimos cuenta de que el análisis de la salida de xrandr
por lwjgl 2.9 falló debido a una salida (abreviada aquí) como:
DP1 connected primary 1920x1200+1920+0 (normal left inverted right x axis y axis) 518mm x 324mm
1920x1200_60.0 59.95*+
1920x1200 59.95 +
1920x1080 60.00 50.00 59.94 30.00 25.00 24.00 29.97 23.98
1920x1080i 60.00 50.00 59.94
1600x1200 60.00
HDMI1 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 518mm x 324mm
1920x1200_60.0 59.95*+
1920x1200 59.95 +
HDMI2 disconnected (normal left inverted right x axis y axis)
Los modos de visualización con guión bajo parecen ser el problema.
Exception in thread "LWJGL Application" java.lang.ExceptionInInitializerError
at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.setVSync(LwjglGraphics.java:558)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
at org.lwjgl.opengl.XRandR.findPrimary(XRandR.java:326)
at org.lwjgl.opengl.XRandR.ScreentoDisplayMode(XRandR.java:315)
at org.lwjgl.opengl.LinuxDisplay$3.run(LinuxDisplay.java:746)
at org.lwjgl.opengl.LinuxDisplay$3.run(LinuxDisplay.java:743)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.opengl.LinuxDisplay.init(LinuxDisplay.java:743)
at org.lwjgl.opengl.Display.<clinit>(Display.java:138)
... 2 more
AL lib: (EE) alc_cleanup: 1 device not closed
gdx-backend-lwjgl
a gdx-backend-lwjgl3
en https://github.com/libgdx/libgdx/blob/9e4c560c66f4358cfd63381c9c35dca3e83a1e0d/extensions/gdx-setup/src/com/badlogic/gdx/setup/DependencyBank.java #L85Lwjgl3 aún no está listo para usarse en stand in, la solución official
será que cuando esté listo, hasta entonces puedes cambiarlo manualmente a lwjgl3 si lo necesitas.
¿Lwjgl3 está listo ahora? Acabo de encontrarme con esto
Editar: fue capaz de hacerlo funcionar cambiando
implementation "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
a
implementation "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
y actualizando DesktopLauncher.java
¿Dónde editas esta línea? Estoy recibiendo lo siguiente.
Excepción en el subproceso "Aplicación LWJGL" java.lang.NoClassDefFoundError: no se pudo inicializar la clase org.lwjgl.Sys
en org.lwjgl.opengl.Display.
en com.badlogic.gdx.backends.lwjgl.LwjglGraphics.setVSync(LwjglGraphics.java:592)
en com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:126)
@wardrummers
diff --git a/build.gradle b/build.gradle
index 908b5b7..096b460 100644
--- a/build.gradle
+++ b/build.gradle
@@ -44,7 +44,7 @@ project(":desktop") {
dependencies {
implementation project(":core")
- api "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
+ api "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
}
Simplemente cámbielo en las dependencias del proyecto ":desktop".
Luego, debe ajustar las clases para el código específico de escritorio:
diff --git a/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java b/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java
index fd6833f..c0071b5 100644
--- a/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java
+++ b/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java
@@ -1,12 +1,12 @@
package com.mygdx.game.desktop;
-import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
-import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
+import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
+import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
import com.mygdx.game.MyGdxGame;
public class DesktopLauncher {
public static void main (String[] arg) {
- LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
- new LwjglApplication(new MyGdxGame(), config);
+ Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
+ new Lwjgl3Application(new MyGdxGame(), config);
}
}
(Simplemente use :%s/Lwjgl/Lwjgl3/g y :%s/lwjgl/lwjgl3/g o cualquier función de búsqueda y reemplazo en su editor).
Comentario más útil
@wardrummers
Simplemente cámbielo en las dependencias del proyecto ":desktop".
Luego, debe ajustar las clases para el código específico de escritorio:
(Simplemente use :%s/Lwjgl/Lwjgl3/g y :%s/lwjgl/lwjgl3/g o cualquier función de búsqueda y reemplazo en su editor).