Java 如何使用SpriteBatch绘制,而不是直接绘制到屏幕上,而是使用Pixmap?

Java 如何使用SpriteBatch绘制,而不是直接绘制到屏幕上,而是使用Pixmap?,java,libgdx,Java,Libgdx,我目前正在开发一款基于窗口系统(如Windows(OS)资源管理器)的游戏 为了提高性能,当窗口变脏时,我只绘制一个包含所有组件的窗口(必须渲染更改)。绘制“脏”窗口时,渲染图像存储在Pixmap中。因此,下次渲染窗口时,将绘制像素贴图。想象一下,这就像只渲染窗口的屏幕截图一样。这实际上会导致更稳定的帧率 但我的问题是: 当窗口背景是透明的,并且背景中的某些内容发生更改时,这些更改将与透明窗口保存的Pixmap(屏幕截图)重叠 我目前的解决方案是在渲染到Pixmap之前清除背景。但是当我这么做的

我目前正在开发一款基于窗口系统(如Windows(OS)资源管理器)的游戏

为了提高性能,当窗口变脏时,我只绘制一个包含所有组件的窗口(必须渲染更改)。绘制“脏”窗口时,渲染图像存储在Pixmap中。因此,下次渲染窗口时,将绘制像素贴图。想象一下,这就像只渲染窗口的屏幕截图一样。这实际上会导致更稳定的帧率

但我的问题是: 当窗口背景是透明的,并且背景中的某些内容发生更改时,这些更改将与透明窗口保存的Pixmap(屏幕截图)重叠

我目前的解决方案是在渲染到Pixmap之前清除背景。但是当我这么做的时候,背景中的所有东西都会闪过一帧。然后我试着保存到目前为止绘制的所有内容的屏幕截图(背景),然后绘制透明窗口,保存在Pixmap中,再次绘制背景,并在其上方绘制干净的Pixmap。正如您可以想象的那样,这会消耗太多的渲染时间,并导致1080p上的帧速率超过50%

最佳解决方案(imho)是始终将脏窗口直接绘制到Pixmap,而不是屏幕。像这样,它总是可以被画到一个空画布上,而不会与背景发生冲突。然后,Pixmap将被绘制到屏幕上。用ByteArray或任何可比较的东西代替Pixmap也可以

我想不出一个方法来做这件事,也没有在谷歌上找到任何有用的东西


~Thank

使用Pixmap几乎从来都不是一个好的解决方案。你想用FBO(帧缓冲区对象,或者只是帧缓冲区)来代替。哇,非常感谢:)这正是我需要的