我怎样才能截图整个镜头而不仅仅是游戏场景?

kiayqfof  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(248)

我知道如何拍摄当前帧缓冲区边界的屏幕截图,它只需要屏幕上的视觉绘制像素(游戏场景)。例如,我画了15个图像,如图所示。

但由于帧缓冲区的限制(游戏场景或游戏的摄像机坐标),您只能看到6幅图像
现在:我使用scrollpane的prefwidth(大于缓冲区宽度)应用了截图代码来截取15幅图片的截图,如代码所示:

private Stage stage;
private ScrollPane pane;

@Override
public void create() {
    stage = new Stage();

    Table table = new Table();
    for (int i = 0; i < 15; i++)
        table.add(new Image(new Texture("badlogic.jpg"))).size(100f).grow();

    pane = new ScrollPane(table);
    stage.addActor(pane);

    Gdx.input.setInputProcessor(stage);
    pane.debugAll();
}

@Override
public void render() {
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    stage.act();
    stage.draw();

    if (Gdx.input.isKeyJustPressed(Input.Keys.SPACE)) {
        byte[] pixels = ScreenUtils.getFrameBufferPixels(0, 0, (int) pane.getPrefWidth(), Gdx.graphics.getBackBufferHeight(), true);

        // This loop makes sure the whole screenshot is opaque and looks exactly like what the user is seeing
        for (int i = 4; i < pixels.length; i += 4) {
            pixels[i - 1] = (byte) 255;
        }

        Pixmap pixmap = new Pixmap((int) pane.getPrefWidth(), Gdx.graphics.getBackBufferHeight(), Pixmap.Format.RGBA8888);
        BufferUtils.copy(pixels, 0, pixmap.getPixels(), pixels.length);
        PixmapIO.writePNG(Gdx.files.absolute("E:\\Programs\\" + UUID.randomUUID() + ".png"), pixmap);
        pixmap.dispose();
    }
}

但结果是肯定的:

我如何才能采取15个图像作为整个游戏的坐标截图(画像素+不画像素)没有调整相机的大小!?
谢谢你的帮助!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题