2012-06-11 15 views
11

Por lo tanto, hice el proyecto tutorial de gotas de lluvia por libGDX. Sin embargo, cuando intento desplegarlo en el emulador me sale un error que dice que la imagen no tiene una potencia de 2. Pero cambié el tamaño de las imágenes para que fueran 48X48 usando GIMP (como lo sugirió el tutorial). Creo que ha agregado algún código para asegurarse de que sea posible agregar imágenes que no sean necesariamente una potencia de dos.imagen no es una potencia de 2?

¿Alguien sabe cómo arreglaría esto? Convertirlo en una potencia de dos es un poco limitante ... ¿no? ¡Seguí el tutorial muy de cerca! Entonces ... no estoy seguro a dónde ir desde aquí. Noob en libGDX.

LogCat Dump:

06-11 00:22:50.942: W/dalvikvm(545): threadid=11: thread exiting with uncaught exception (group=0x409c01f8) 
06-11 00:22:50.952: E/AndroidRuntime(545): FATAL EXCEPTION: GLThread 72 
06-11 00:22:50.952: E/AndroidRuntime(545): com.badlogic.gdx.utils.GdxRuntimeException: Texture width and height must be powers of two: 48x48 
06-11 00:22:50.952: E/AndroidRuntime(545): at com.badlogic.gdx.graphics.Texture.uploadImageData(Texture.java:197) 
06-11 00:22:50.952: E/AndroidRuntime(545): at com.badlogic.gdx.graphics.Texture.load(Texture.java:179) 
06-11 00:22:50.952: E/AndroidRuntime(545): at com.badlogic.gdx.graphics.Texture.create(Texture.java:159) 
06-11 00:22:50.952: E/AndroidRuntime(545): at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:133) 
06-11 00:22:50.952: E/AndroidRuntime(545): at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:122) 
06-11 00:22:50.952: E/AndroidRuntime(545): at com.badlogic.drop.Drop.create(Drop.java:38) 
06-11 00:22:50.952: E/AndroidRuntime(545): at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:292) 
06-11 00:22:50.952: E/AndroidRuntime(545): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1455) 
06-11 00:22:50.952: E/AndroidRuntime(545): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216) 
06-11 00:22:51.041: I/AndroidInput(545): sensor listener tear down 
06-11 00:22:51.041: I/AndroidGraphics(545): Managed meshes/app: { } 
06-11 00:22:51.041: I/AndroidGraphics(545): Managed textures/app: { } 
06-11 00:22:51.041: I/AndroidGraphics(545): Managed shaders/app: { } 
06-11 00:22:51.041: I/AndroidGraphics(545): Managed buffers/app: { } 
+2

32 y 64 son potencias de dos. 48 no es. – duskwuff

+1

El tutorial decía que podríamos cambiarlo a 48x48. Creo que había agregado un código allí para asegurarse de que no se rompa. ¿Hay alguna manera de hacer eso? ¿Para que las imágenes no necesiten ser un poder de dos? Como dije, volví a clasificar según el tamaño las imágenes a 48X48 como él sugirió en el tutorial ... raro: ¿S – BigBug

+0

liga al tutorial? – Junuxx

Respuesta

29

48x48 no es una potencia de dos. La aplicación requiere OpenGL ES 2.0 como se indica en el texto. El emulador estándar solo ejecuta OpenGL ES 1.0. Puede cambiar la escala de la imagen a 32x32, y luego todo funcionará como se espera en OpenGL ES 1.x también.

Recomendaría no utilizar el emulador para probar las aplicaciones OpenGL ES. Use un dispositivo real en su lugar.

+0

Buena respuesta. Esto me estaba volviendo loco porque la aplicación en la que estaba trabajando se ejecutaría en el dispositivo pero no en el emulador. ¡Gracias! Además, gran amigo tipo marco! Sigan con el buen trabajo! – LoveMeSomeCode

18

Puede que deje de hacer cumplir la potencia de dos requisito estableciendo la siguiente línea de código en la clase de juego en el método create():

Texture.setEnforcePotImages(false); 
+0

Gracias - Esta es una solución práctica. ¿Es seguro usar esto, incluso en plataformas de destino compatibles con OpenGL 1.0? Preferiría esta solución porque estoy desarrollando un juego en 2D y, por lo tanto, solo estoy usando el modo de dibujo ortogonal de OpenGL. Proporcionar todas las dimensiones de Imagen con una potencia de 2 parece demasiado restrictivo para mí aquí en muchos casos. –

+1

No sé cuál es la diferencia, pero tuve que escribir esto para que funcione: 'GLTexture.setEnforcePotImages (false);' –

0

esto funcionó para mí cambiar todo "GL10" importado de "com.badlogic.gdx.graphics.GL10" a "GL20" importado de "com.badlogic.gdx.graphics.GL20"

Cuestiones relacionadas