它们是 JLayeredPane 中的几个 JPanel、mapgrid 和覆盖,底部带有 mapgrid。Mapgrid 只是在初始化网格时绘制,它的绘制方法是:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
g2d.setColor(new Color(128, 128, 128, 255));
g2d.drawRect(tileSize * j, i * tileSize, tileSize, tileSize);
}
}
在覆盖 JPanel 中,突出显示发生在,这是移动鼠标时重新绘制的内容:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(new Color(255, 255, 128, 255));
g2d.drawRect((pointerX/tileSize)*tileSize,(pointerY/ tileSize)*tileSize, tileSize, tileSize);
}
我注意到,即使在鼠标移动时没有重新绘制基础层(mapgrid),只是透明覆盖层,性能也有所欠缺。如果我给覆盖 JPanel 一个背景,它的方式会更快。如果我删除 mapgrid Antialiasing,它也会更快一些。
我不知道为什么为覆盖层提供背景(从而隐藏地图网格)或在地图网格中禁用抗锯齿会导致更好的性能。
有一个更好的方法吗?为什么会这样?