在游戏暂停之前复制当前屏幕的图片使其模糊并在游戏暂停期间渲染到屏幕
我无法在游戏暂停状态下实现游戏暂停模糊屏幕渲染。 当用户暂停屏幕时,我需要拍摄当前屏幕的图片或纹理,即游戏运行状态。 也许将它存储到内存中,模糊然后将其渲染到屏幕以实现漂亮的模糊,高斯模糊效果就像他们在愤怒的小鸟等流行游戏中一样。
我尝试使用截图实现,但屏幕截图的过程使游戏冻结了几秒钟,这是不好的。
这是我的渲染代码的一部分
private void updatePlayerForUserInput(float delta) { if (Gdx.input.isKeyPressed(Keys.P) || pause) { ScreenShotSaver.saveScreenShot(); state = State.GAME_PAUSED; if(!DEBUG_MODE) { toggleGestureProcessor(false); setBackgroundTexture(new TextureRegion(applyBlurEffect(Gdx.files.external("madboy/screenshot.png")))); gameScreenGamePauseMenu.sendInMenu(); } } }
有人可以像这样帮助实现屏幕
这是我想要的效果的一个例子1: 在这里输入链接描述这是另一个,类似的东西虽然2: 在这里输入链接描述
这是我的更新逻辑的一部分,具体取决于游戏状态
private void render(float delta) { switch (state) { case GAME_READY: renderReady(); break; case GAME_RUNNING: renderRunning(delta); break; case GAME_PAUSED: renderPaused(); break; case GAME_LEVEL_END: renderLevelEnd(); break; case GAME_OVER: renderGameOver(); break; } } private void update(float delta) { switch(state) { case GAME_READY: updateReady(); break; case GAME_RUNNING: updateRunning(delta); break; case GAME_PAUSED: updatePaused(); break; case GAME_LEVEL_END: updateLevelEnd(); break; case GAME_OVER: updateGameOver(); break; } }
我使用Libgdx库和java编程
不要将屏幕截图的图像保存到文件,而是尝试使用以下内容
TextureRegion(纹理)
纹理(像素图)
Pixmap(byte [],int,int)
Pixmap构造函数中的字节数组应包含图像字节,两个整数是偏移量和长度
如何将图像作为字节获取的示例:
BufferedImage bufferedImage = new Robot().createScreenCapture(new Rectangle(startX, startY, width, height)); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, format, outputStream); outputStream.flush(); byte[] data = outputStream.toByteArray(); outputStream.close();
其中format
可以是Stringforms的任何图像格式(下面的示例):
String format = "png"; String format = "jpg";