Java Swing重/慢paintComponent – 任何建议?

我正在制作一个滚动的2D地图/平铺游戏。 每个图块(存储为图块[21] [11] – 每个图总共231个图块)最多可包含21个值(存储为int [3] [7])。 全屏时我一次看到大约8张地图。

平均而言,每个地图绘制大约需要0.03秒(使用System.nanoTime找到)。 问题是,只要屏幕上有多个地图,Swing事件轮询就会明显变慢。

这有什么解决方案吗? 我无法一次绘制地图以将其保存为图像,因为它具有涉及移动演员的透明度,因此它变化太频繁。 另外我不认为我可以在paintComponent中调用一个线程来绘制地图而不会出现故障,但我并不积极。

我的Tiles不是任何类型的JComponent ,它们只是数据。 我将它们的容器称为MapPane ,它在paintComponent绘制所有的tile。

同样, JTable单元格只是在JComponent呈现的数据; 这里提到的flyweight模式仍然适用:目标是省略任何渲染不可见单元格的工作。 剖析和自我时间 ,以优化渲染; 在这里引用的KineticModel中检查了一些方法。

不需要缩放的BufferedImage是最好的。 如果必须缩放,请尝试与插值类型相关的RenderingHints 。 如果合成太贵,可以使用SwingWorker在后台构建地图; publish()它们变得可用并在EDT上process()它们process()如此处所示)。