我正在制作一个简单的绘图程序,用户可以使用鼠标在屏幕上绘制线条。
当运行程序时,当绘图区域填充越来越多的行时,它最终会变得非常“滞后”。
我在SO中询问过这个问题并且还对谷歌进行了一些研究。我明白“双缓冲”可能是解决问题的方法。
我想解释一下我的程序,解释我在这个程序中实现双缓冲的想法,然后提出两个问题。
我的计划:
程序在每秒运行25次的更新循环中运行。
每个更新周期,程序会检查鼠标是否被按下。
如果按下:创建一个新的Line
对象,由 更新周期中鼠标 的点组成, 当前更新周期中鼠标 的点。
这段非常短的Line
已添加到名为List
的{{1}}。
绘图区域(lines
)的每个更新周期都重新绘制。每次重新绘制时,它都会在JPanel
内绘制所有内容。
用户绘制的越多,程序在每个更新周期中显示的越多,就会导致滞后。
我如何考虑实施双缓冲:
我不会在每个更新周期中绘制所有行,而是执行此操作:
每个更新循环,我只将用户创建的新行 - 绘制到lines
。
每个更新周期,绘图区域都会重新绘制,但只会显示此BufferedImage
。
我的问题:
这被认为是“双缓冲”吗?
我是否还需要重新映射BufferedImage
每个更新周期?如果答案为“是”,则在这种情况下取消双缓冲的整个点 - 这是为了使程序不断地在大列表中绘制每个对象。
由于