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

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

我正在使用 Libgdx 库并使用 java 进行编程

最佳答案

不要将屏幕截图的图像保存到文件中,而是尝试使用以下内容

TextureRegion(Texture)

Texture(Pixmap)

Pixmap(byte[], int, int)

Pixmap构造函数中的字节数组应该包含图像字节,两个整数是offset和length

如何获取字节图像的示例:

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

关于java - 在游戏暂停之前复制当前屏幕的图片,将其模糊并在游戏暂停期间渲染到屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29051437/

相关文章:

安卓认证

iphone - glPointSizePointerOES 和 glScalef

ios - GPUImage:2个分支链的同步

java - 如何返回列表中的最后一个通用对象? java

android - repo init 和 repo sync 实际上是做什么的?

java - 禁用 Maven 依赖中介

android - 获取运输方向有什么问题?

java - 渲染 : To draw-once or to re-draw? JOGL + Java2D + Java Swing 会很麻烦吗?

java - Component.getWidth() 在不同的上下文中返回 0

java - JCheckBoxMenuItem 只有一个被选中