我看到很多人在他们的Paint方法中将Graphics类型转换为Graphics2d类型,以便在他们绘制的图像上具有更多功能。是否不可能将图形类型转换为paint函数之外的graphics2d类型?对我来说,这会引起性能问题,因为每次调用paint方法(即每一帧)时,每次都会不必要地转换为Graphics2D类型。
此外,只要调用paint方法并再次绘制相同的屏幕,Java是否会进行任何优化?例如,如果您只是在屏幕上移动一个元素,那么通常只需要更新该元素。每次调用paint方法时,java都会重绘并重新处理整个屏幕。对我来说,这一切似乎都是不必要的加工过程。
示例代码:
public void paint(Graphics g) {
AffineTransform transformer = new AffineTransform();
transformer.translate(5,5);
transformer.scale(2,2);
Graphics2D g2d = (Graphics2D)g;
g2d.setTransform(transformer);
// draw to g2d.
}
答案 0 :(得分:1)
你说:
对我来说,这会引起性能问题,因为每次调用paint方法(即每一帧)时,每次都会不必要地转换为Graphics2D类型。
这个成本最低,所以我不担心。而是对您的程序进行分析,并专注于分析器显示您重要的瓶颈。
是否无法将图形类型转换为绘制函数之外的graphics2d类型?
没有
此外,只要调用paint方法并再次绘制相同的屏幕,Java是否会进行任何优化?例如,如果您只是在屏幕上移动一个元素,那么通常只需要更新该元素。每次调用paint方法时,java都会重绘并重新处理整个屏幕。对我来说,这一切似乎都是不必要的处理密集型
我不这么认为。我所做的是1)创建一个BufferedImage来显示我的静态图像,然后直接绘制我的动态图像,2)如果需要,使用接受的repaint(...)
方法重载限制绘制的区域一个矩形。