2012-06-11 2 views
11

Also, ich habe das Regentropfen-Tutorial-Projekt von libGDX gemacht. Jedoch, wenn ich versuche, es in den Emulator zu implementieren, erhalte ich einen Fehler, der besagt, dass das Bild keine Stärke von 2 ist. Aber ich habe die Bilder mit GIMP auf 48x48 verkleinert (wie das Tutorial vorgeschlagen hat). Ich glaube, er hatte einen Code hinzugefügt, um sicherzustellen, dass es möglich wäre, Bilder hinzuzufügen, die nicht unbedingt eine Zweierpotenz sind?Bild ist keine Potenz von 2?

Weiß jemand, wie ich das beheben würde? Es zu einer Zweierpotenz zu machen, ist ein bisschen einschränkend ... oder? Ich habe das Tutorial sehr genau verfolgt! Also ... ich bin mir nicht sicher, wo ich von hier aus hingehen soll. Noob bei 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 und 64 sind Potenzen von zwei. 48 ist nicht. – duskwuff

+1

Das Tutorial hatte gesagt, dass wir es auf 48x48 ändern könnten. Ich glaube, er hat Code hinzugefügt, um sicherzustellen, dass es nicht kaputt geht. Gibt es eine Möglichkeit, das zu tun? Damit die Bilder nicht unbedingt eine Zweierpotenz sein müssen? Wie ich schon sagte, habe ich die Größe der Bilder auf 48X48 geändert, wie er im Tutorial vorgeschlagen hat ... seltsam: S – BigBug

+0

Link zum Tutorial? – Junuxx

Antwort

29

48x48 ist nicht eine Zweierpotenz. Die App benötigt OpenGL ES 2.0 wie im Text angegeben. Der Standardemulator führt nur OpenGL ES 1.0 aus. Sie können das Bild auf 32x32 skalieren, dann funktioniert alles wie erwartet auf OpenGL ES 1.x.

Ich würde empfehlen, den Emulator nicht zum Testen von OpenGL ES-Anwendungen zu verwenden. Verwenden Sie stattdessen ein echtes Gerät.

+0

Gute Antwort. Das machte mich verrückt, weil die App, an der ich arbeitete, auf dem Gerät laufen würde, aber nicht auf dem Emulator. Vielen Dank! Auch, toller Rahmen, Alter! Mach weiter so! – LoveMeSomeCode

18

Sie können es von stoppen die Leistung von zwei Forderung durchzusetzen, indem Sie die folgende Codezeile in Ihrem Spiel Klasse Einstellung in der create() Methode:

Texture.setEnforcePotImages(false); 
+0

Danke - Dies ist eine handliche Lösung .. Ist es sicher, dies zu verwenden, auch auf Zielplattformen, die OpenGL 1.0 unterstützen? Ich würde diese Lösung bevorzugen, weil ich ein 2D-Spiel entwickle und deshalb verwende ich nur den orthogonalen Zeichnungsmodus von OpenGL. Alle Bilddimensionen mit einer Zweierpotenz zu versehen, erscheint mir in vielen Fällen zu einschränkend. –

+1

Ich weiß nicht, was der Unterschied ist, aber ich musste dies schreiben, damit es funktioniert: 'GLTexture.setEnforcePotImages (false);' –

0

dies für mich gearbeitet alle „GL10“ ändern importiert von "com.badlogic.gdx.graphics.GL10" nach "GL20" importiert von "com.badlogic.gdx.graphics.GL20"

Verwandte Themen