我正在使用Java制作2D游戏,导致低FPS的主要问题之一(在我的慢速笔记本电脑上)不得不将复杂结构重新绘制到Graphics实例,例如带标记的刻度盘。
除非调整窗口大小,否则表盘及其标记永远不会改变,因此我认为最好绘制到BufferedImage
并重新绘制图像而不是重新绘制细节。针的位置明显改变,因此可以将其绘制在顶部。
我从未听说过如何改进2D游戏的FPS,所以我想知道存储图像缓存是否真的是好的做法,或者是否有更好的方法来解决这类问题?我还没有考虑过与此相关的问题吗?
答案 0 :(得分:2)
缓存图像并不是一个坏主意:您可以依赖光栅渲染在大多数平台上进行优化。根据我的经验(主要是在涉及2D图形的移动设备上),Graphics.drawXXX()
方法通常比Graphics.drawImage()
慢得多。
根据我的经验,绝大多数2D游戏都使用精灵(即图像)来渲染几乎所有东西。即使图形看起来像使用基元渲染,通常也是如此!
要考虑的另一个有用的技术是根本不重绘区域,除非你真的需要!
编辑:
正如其他人所提到的,主要的权衡是你将会使用更多的内存。一旦你不再需要它们,你还必须确保释放这些图像。
答案 1 :(得分:1)
缓存2D绘图的某些部分是一种好习惯吗?
您在绘制速度和存储空间之间进行权衡。只有你可以确定哪个更重要。
您可以考虑提前渲染刻度盘并将图像保存为GIF,JPG或PNG文件。在绘制之前,您必须将这些图像缩放到窗口大小。
您是否在图形面板上使用双缓冲?
答案 2 :(得分:0)
是的,这是一个很好的做法,并且一直都在做。在将图像显示在屏幕上之前首先绘制到图像称为双缓冲,并且可以根据程序的需要以不同的方式使用该方法。
双缓冲的缺点是内存,因为它需要更多的内存来存储第二张图像,但这听起来像是你需要做出的权衡。