我知道如何拍摄当前帧缓冲区边界的屏幕截图,它只需要屏幕上的视觉绘制像素(游戏场景)。例如,我画了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个图像作为整个游戏的坐标截图(画像素+不画像素)没有调整相机的大小!?
谢谢你的帮助!
暂无答案!
目前还没有任何答案,快来回答吧!