2012-06-11 8 views
11

Przygotowałem projekt tutoriala raindrop autorstwa libGDX. Jednak, gdy próbuję wdrożyć go na emulatorze, pojawia się błąd informujący, że obraz nie jest potęgą 2. Ale zmieniłem rozmiar obrazów na 48X48 używając GIMP (jak sugerował samouczek). Sądzę, że dodał w jakimś kodzie, aby upewnić się, że można dodać obrazy, które niekoniecznie były potęgą dwóch osób?obraz nie jest potęgą 2?

Czy ktoś wie, jak to naprawić? Czynienie z dwóch rzeczy jest nieco ograniczające ... prawda? Bardzo dokładnie śledziłem tutorial! Więc ... nie jestem pewien, dokąd się udać. Noob w libGDX.

LogCat przegubowe:

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 i 64 są potęgami dwóch. 48 nie jest. – duskwuff

+1

Samouczek powiedział, że możemy go zmienić na 48x48. Myślę, że dodał tam kod, żeby się nie złamał. Czy jest sposób na robienie tego? Czy obrazy nie muszą być potęgą dwóch? Jak już powiedziałem, zmieniłem rozmiar obrazów na 48X48, jak sugerował w samouczku ... dziwne: S – BigBug

+0

link do samouczka? – Junuxx

Odpowiedz

29

48x48 nie jest potęgą dwójki. Aplikacja wymaga OpenGL ES 2.0 zgodnie z opisem w tekście. Standardowy emulator obsługuje tylko OpenGL ES 1.0. Możesz przeskalować obraz do 32x32, a następnie wszystko będzie działało zgodnie z oczekiwaniami także w OpenGL ES 1.x.

Nie polecam używania emulatora do testowania aplikacji OpenGL ES. Zamiast tego użyj prawdziwego urządzenia.

+0

Dobra odpowiedź. To doprowadzało mnie do szaleństwa, ponieważ aplikacja, nad którą pracowałem, działała na urządzeniu, ale nie na emulatorze. Dzięki! Również świetny gość z ramówki! Tak trzymaj! – LoveMeSomeCode

18

można zatrzymać jej egzekwowania moc dwóch wymogu poprzez ustawienie następujący wiersz kodu w klasie gry na create() metoda:

Texture.setEnforcePotImages(false); 
+0

Dzięki - To poręczne rozwiązanie .. Czy można z niego bezpiecznie korzystać, nawet na docelowych platformach obsługujących OpenGL 1.0? Wolałbym to rozwiązanie, ponieważ opracowuję grę 2D i dlatego używam tylko prostopadłego trybu rysowania OpenGL. Udostępnienie wszystkich wymiarów obrazu z potęgą 2 wydaje się w wielu przypadkach zbyt ograniczające dla mnie. –

+1

Nie wiem jaka jest różnica, ale musiałem napisać to, aby działało: 'GLTexture.setEnforcePotImages (false);' –

0

ten pracował dla mnie zmienić wszystko „GL10” zaimportowane z "com.badlogic.gdx.graphics.GL10" do "GL20" zaimportowane z "com.badlogic.gdx.graphics.GL20"

Powiązane problemy