Java Swing 重/慢 paintComponent - 有什么建议吗?

标签 java performance swing paint event-dispatch-thread

我正在制作一款基于滚动 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 of JComponent, they're just data. I call their container the MapPane, which draws all of the tiles in its paintComponent.

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

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

关于Java Swing 重/慢 paintComponent - 有什么建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481823/

相关文章:

multithreading - 如何使用线程提高 pymongo 性能?

performance - 如何正确确定Intel处理器的-march和-mtune?

c++ - 为什么代码以线性方式比以循环方式运行得慢?

java - JEdi​​torPane 中带有超链接的本地 HTML 将被方法拦截

Java错误?为什么画矩形而不是椭圆?

java - 在 Hadoop 中获取百分比

java - 我的应用程序中的警报

java - 迭代器和常规 for 循环

java - Swing JTable 中 autoCreateRowSorter 的初始状态

Java 线程竞争条件与 BlockingQueue