我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个值(存储为 int[3][7])。全屏时,我一次可以看到大约 8 张 map 。
平均而言,绘制每张 map 大约需要 0.03 秒(通过 System.nanoTime 找到)。问题是,一旦屏幕上显示超过 1 张 map ,Swing 事件轮询就会明显减慢。
有什么解决办法吗?我无法一次绘制 map 以将其保存为图像,因为它具有涉及移动 Actor 的透明度,因此它更改得太频繁了。此外,我认为我无法调用 paintComponent 中的线程来绘制 map 而不会出现故障,但我并不肯定。
最佳答案
My
Tiles
aren't any type ofJComponent
, they're just data. I call their container theMapPane
, which draws all of the tiles in itspaintComponent
.
同样,JTable
单元格只是在 JComponent
中呈现的数据;享元模式,提到here , 仍然适用:目标是省略任何渲染不可见单元格的工作。 Profile和 self-time为了优化渲染;在引用 here 的 KineticModel
中检查了一些方法.
不需要缩放的 BufferedImage
是最好的。如果必须缩放,请尝试与插值类型相关的 RenderingHints
。如果合成成本太高,请使用 SwingWorker
在后台构建 map ; publish()
它们变得可用,并在 EDT 上process()
它们,如图所示 here .
关于Java Swing 重/慢 paintComponent - 有什么建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481823/