Ich schreibe ein Spiel für Android mit libgdx. Wenn der Benutzer das Pausenmenü öffnet, mache ich einen Screenshot des aktuellen Spiels, verwische es und verwende es als Hintergrund für das Optionsmenü. Dies funktioniert gut, aber der Code für den Screenshot ist sehr langsam. Es dauert etwa 0,8 Sekunden im Durchschnitt mit dem folgenden Code ...Java Libgdx bekommen Screenshot sehr langsam
Gibt es eine andere Möglichkeit, einen Screenshot in libgdx zu machen, die viel schneller ist? Wenn nicht, wenn der Benutzer das Optionsmenü öffnet, könnte ich versuchen, einfach das Spiel zu rendern, die Spiellogik anzuhalten und den Bildschirm zu verwischen und die Optionen oben zu zeichnen .. Wenn das der einzige schnelle Weg ist, wie könnte man verwischen der Bildschirm? Ich habe this link gefunden, aber ich habe es nicht zum Laufen gebracht. Wenn es möglich ist, ziehe ich die Lösung mit dem Screenshot, weil es viel einfacher ...
ist-Code den Screenshot zu erhalten (von official wiki):
public static Pixmap getScreenshot(){
long start = TimeUtils.millis();
byte[] pixels = ScreenUtils.getFrameBufferPixels(0, 0, Gdx.graphics.getBackBufferWidth(), Gdx.graphics.getBackBufferHeight(), true);
Pixmap pixmap = new Pixmap(Gdx.graphics.getBackBufferWidth(), Gdx.graphics.getBackBufferHeight(), Pixmap.Format.RGBA8888);
BufferUtils.copy(pixels, 0, pixmap.getPixels(), pixels.length);
long time = TimeUtils.millis()-start;
Gdx.app.log("INFO", "Time for screenshot in sec.: " + time); // about 0.8 seconds
return pixmap;
}
ich die resultierenden Pixmap verwende meine Textur zu zeichnen .
EDIT:
Mein Code jetzt mit der Antwort von Deniz Yilmaz für das Erhalten des Screenshot schnell:
public Texture getScreenshot(){
Texture texture = new Texture(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), Pixmap.Format.RGB888);
Gdx.gl.glEnable(GL20.GL_TEXTURE_2D);
Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0);
texture.bind();
Gdx.gl.glCopyTexImage2D(GL20.GL_TEXTURE_2D, 0, GL20.GL_RGB, 0, 0,Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 0);
Gdx.gl.glDisable(GL20.GL_TEXTURE_2D);
return texture;
}
Zeichnen Sie Ihre Szene zu einem FrameBuffer und verwenden Sie diese. – Tenfour04
@ Tenfour04 könnten Sie etwas genauer sein? Ich würde gerne eine klare und gründliche Antwort sehen, die eine bessere Möglichkeit beschreibt, einen Screenshot als die Dokumentation zu erstellen. – Madmenyo
@ Tenfour04 Danke, kannst du ein kurzes Beispiel geben, wie man (eine Textur?) Zu einem Framebuffer zeichnet und (mit einem Shader ??) es unscharf macht? – trinity420