0

我正在使用 Java 创建一个图形化的 roguelike 游戏。在游戏中,我将 Tile 对象的二维数组绘制到 JPanel 上。这些 Tile 对象代表地面。我有一个 .bmp 精灵表,其中包含我想用来绘制的所有纹理。每次玩家移动时,玩家可见的图块都需要重新绘制。

我的问题是性能问题。我过去已经实现了这一点,我让 Tiles 扩展了 JPanel,每个 Tile 只使用 bufferedImage.getSubImage() 显示精灵表的适当部分,而父 JPanel 只是在所有 Tiles 上调用 paint()二维数组。这对于上一个项目中的小型 30x20 地图效果很好,但我不确定它是否适用于当前游戏。

我应该使用相同的方法还是有其他可能的解决方案可以加快绘制时间?Tile 类是否应该扩展一些其他的 Swing 或 AWT 组件,例如 BufferedImage 还是不会产生影响?

谢谢。

4

2 回答 2

2

这款基于瓷砖的游戏在大屏幕上运行良好:1900x1200 像素,60x36 瓷砖。将图像缩放到目标矩形似乎消耗了大部分渲染预算。这里有更多的讨论。

于 2010-03-04T03:43:49.713 回答
2

您可以为电路板使用单个组件(而不是每个图块一个)并让它处理每个图块的绘制。单独的渲染器可以处理单独的瓷砖绘画,以使解决方案更加模块化。这是 JTable 使用的类似方法及其单元格的呈现。

不确定 getSubImage() 的性能,可能值得预先提取(和缓存)单个图像。

也只看重绘改变的单元格(如果你还没有)。

于 2010-03-04T02:27:52.130 回答