小编典典

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

java

我正在做一个基于滚动2D地图/平铺的游戏。每个图块(存储为tile [21] [11]-每个地图总共231个图块)最多可以包含21个值(存储为int [3]
[7])。在全屏模式下,我一次可以看到8张地图。

平均而言,每张地图的绘制时间约为0.03秒(可通过System.nanoTime找到)。问题在于,一旦在屏幕上显示多于一张地图,Swing事件轮询就会明显变慢。

有什么解决办法吗?我无法一次绘制地图以将其另存为图像,因为它具有涉及移动角色的透明性,因此更改过于频繁。我也不认为我可以在paintComponent中调用线程来绘制地图而不会出现故障,但是我并不乐观。


阅读 212

收藏
2020-11-30

共1个答案

小编典典

Tiles不是任何类型的人JComponent,他们只是数据。我称他们的容器为MapPane,它会在容器中绘制所有图块paintComponent

同样,JTable单元只是在JComponent;
内部渲染的数据。这里提到的flyweight模式仍然适用:目标是省略渲染不可见单元格的所有努力。配置文件自拍,以优化渲染;这里KineticModel引用一些方法。

BufferedImage不需要缩放的A
最好。如果必须缩放,请尝试与RenderingHints插值类型相关。如果构图太昂贵,请使用SwingWorker;在后台构造地图。publish()它们在可用时process()显示
EDT上,如此处所示。

2020-11-30