gpt4 book ai didi

Java 重绘在某些情况下很慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:00 24 4
gpt4 key购买 nike

我正在做一个简单的网格,每个方 block 都由光标突出显示: alt text

它们是 JLayeredPane 中的几个 JPanel、 map 网格和叠加层, map 网格在底部。 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 抗锯齿,它也会快一点。

我不知道为什么为叠加层提供背景(并因此隐藏 map 网格)或禁用 map 网格中的抗锯齿会导致更好的性能。

有更好的方法吗?为什么会这样?

最佳答案

您可以使用 drawLine 而不是 drawRect。您应该会得到相同的视觉结果,但我认为它会快得多。

此外,如果背景始终相同,我建议在初始化时(或调整框架大小时)绘制到缓冲图像,然后只绘制该图像。这应该会加快绘图速度。

关于Java 重绘在某些情况下很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2520782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com