我正在做一个基于滚动2D地图/平铺的游戏。每个图块(存储为tile [21] [11]-每个地图总共231个图块)最多可以包含21个值(存储为int [3] [7])。在全屏模式下,我一次可以看到8张地图。
平均而言,每张地图的绘制时间约为0.03秒(可通过System.nanoTime找到)。问题在于,一旦在屏幕上显示多于一张地图,Swing事件轮询就会明显变慢。
有什么解决办法吗?我无法一次绘制地图以将其另存为图像,因为它具有涉及移动角色的透明性,因此更改过于频繁。我也不认为我可以在paintComponent中调用线程来绘制地图而不会出现故障,但是我并不乐观。
我Tiles不是任何类型的人JComponent,他们只是数据。我称他们的容器为MapPane,它会在容器中绘制所有图块paintComponent。
Tiles
JComponent
MapPane
paintComponent
同样,JTable单元只是在JComponent; 内部渲染的数据。这里提到的flyweight模式仍然适用:目标是省略渲染不可见单元格的所有努力。配置文件和自拍,以优化渲染;这里KineticModel引用了一些方法。
JTable
KineticModel
BufferedImage不需要缩放的A 最好。如果必须缩放,请尝试与RenderingHints插值类型相关。如果构图太昂贵,请使用SwingWorker;在后台构造地图。publish()它们在可用时process()显示在 EDT上,如此处所示。
BufferedImage
RenderingHints
SwingWorker
publish()
process()