2014-01-17 36 views
1

我已经查看了Java游戏开发中的一些指南,其中一些修改了BufferedImage,然后将其显示到Canvas。我的问题是,为什么不直接使用Graphics2D将图像绘制到Canvas?为什么我们使用BufferedImage作为排序的“第三方”。这是否有好处,或者它可能是BufferedImages主要用于处理单个像素的操作?为什么在Graphics2D上使用BufferedImage?

+0

我不知道它是如何正确工作的,但在某些情况下,您可能会看到代码在屏幕上即时绘制内容。即:你可以看到未完成的绘图周期。 –

+0

从我的经验中获得的单个像素,当您需要创建不是预渲染图像的效果和艺术时。 – arynaq

回答

1

可以使用

Graphics2D g = (Graphics2D)bufferedImage.getGraphics(); 

这种方式获得任何BufferedImage一个Graphics2D,你可以使用的Java2D的所有绘画能力,并仍然有它的所有好处(卷积运算,像素操作,重构效果BufferedImage用于游戏屏幕之间的转换(例如淡入淡出)。

Swing的JComponent及其子类已经提供双缓冲功能,所以你是对的,你并不完全需要额外的BufferedImage。不同之处在于,Swing在弄脏区域时会重新绘制区域(例如,当您将另一个窗口移动到游戏视口上时),这可能会影响您的游戏定期(实时)更新屏幕或控制(基于事件的游戏)间隔,所以你最好使用额外的缓冲区。