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

时间:2014-06-30 01:19:15

标签: java performance swing paint event-dispatch-thread

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

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

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

1 个答案:

答案 0 :(得分:3)

  

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

同样,JTable个单元格只是在JComponent内呈现的数据;提到here的flyweight模式仍然适用:目标是省略任何渲染不可见单元格的工作。 Profileself-time以优化渲染; KineticModel引用here中会检查一些方法。

最不需要缩放的BufferedImage。如果必须缩放,请尝试与插值类型相关的RenderingHints。如果合成太贵,请使​​用SwingWorker在后台构建地图; publish()他们在可用时process()他们在EDT上,如here所示。