在游戏暂停之前复制当前屏幕的图片使其模糊并在游戏暂停期间渲染到屏幕

时间:2015-03-14 16:41:05

标签: java android opengl-es libgdx

我无法在游戏暂停状态下实现游戏暂停模糊屏幕渲染。当用户暂停屏幕时,我需要拍摄当前屏幕的图片或纹理,即游戏运行状态。也许将它存储到内存中,模糊然后将其渲染到屏幕以获得漂亮的模糊效果,高斯模糊效果就像它们在愤怒的小鸟等热门游戏中一样。

我尝试使用屏幕截图进行实现,但屏幕截图过程会让游戏冻结几秒钟,但这并不好。

这是我的渲染代码的一部分

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();
                        }
                    }
        }

有人可以像Blured Pause Screen example

一样帮助实现屏幕

这是我非常渴望的效果的一个例子 1 :enter link description here 这是另一个类似的事情 2:enter link description here

这是我的更新逻辑的一部分,具体取决于游戏状态

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;
                    }
            }

Iam使用Libgdx库和java编程

1 个答案:

答案 0 :(得分:1)

请尝试使用以下

,而不是将屏幕截图的图像保存到文件中

TextureRegion(Texture)

Texture(Pixmap)

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可以是字符串形式的任何图像格式(下面的示例):

String format = "png";
String format = "jpg";