【问题标题】:Copy a picture of the current screen just before game pause blur it and render to screen in the duration of game pause在游戏暂停前复制当前屏幕的图片模糊它并在游戏暂停期间渲染到屏幕
【发布时间】:2015-03-14 16:41:04
【问题描述】:

我在实现游戏暂停模糊屏幕以在游戏暂停状态期间渲染时遇到问题。我需要拍摄当前屏幕的图片或纹理,即游戏运行状态,就在用户暂停屏幕时。也许将其存储到内存中,然后对其进行模糊处理,然后将其渲染到屏幕上,以实现良好的模糊、高斯模糊效果,就像他们在愤怒的小鸟等流行游戏中所做的那样。

我尝试使用屏幕截图来实现,但是屏幕截图的过程使游戏冻结了几秒钟,这不太好。

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

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 :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 编程

【问题讨论】:

  • 不要保存到文件(你最大的减速),而是通过弄乱渲染目标来渲染到纹理
  • @ratchetfreak ,您介意举个例子吗,如果可行,我可以选择您的答案。

标签: java android opengl-es libgdx


【解决方案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";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多