在我的程序中,我使用Swing窗口作为我的GUI,我知道我应该使用repaint和paintComponent方法来渲染swing组件。我还有几个需要在主窗口内呈现的自定义类对象。为了便于理解,我的程序是一个游戏,它需要每秒渲染60次移动物体。
在我观看的游戏开发教程中,这个人使用了Canvas的Jframe,但他没有使用paintComponent方法。他只是创建了自己的render()方法,使用从创建bufferStrategy获得的图形上下文来绘制所有图形。
所以,如果它有效(它确实如此),为什么每个人都说使用paintComponent方法以及它们之间究竟有什么区别呢?
如果我使用paintComponent做事的方式,我将如何使用bufferStrategy?
答案 0 :(得分:3)
在我观看的游戏开发教程中,该人使用了Canvas的Jframe,但他没有使用paintComponent方法。他只是创建了自己的render()方法,使用从创建bufferStrategy获得的图形上下文来绘制所有图形。
Canvas
是一个AWT组件,使用BufferStrategy
,您接管绘画过程并负责更新Graphics
上下文并安排它推送到硬件/屏幕。< / p>
这通常被称为“主动绘画”,因为你经常(人们会以恒定的帧速率假设),更新缓冲区。
Swing使用被动绘制过程,因此您永远不知道何时可能发生绘制过程。 Swing有自己的机制来确定应该重新绘制的内容以及何时重新绘制。使用repaint
,您可以向这些机制请求重新绘制组件,但无法保证将因此启动绘制周期。
如果您使用任何Swing组件进行绘画,则必须使用repaint
和paintComponent
,因为Swing负责提供您可以绘制的上下文。
如果您想使用Canvas
,则可以使用BufferStrategy
代替。
基本上,它们是不同的绘画方法。但请记住,如果你使用BufferStrategy
,你会失去所有的Swing API,你不能使用这种方法使用Swing组件,因为它们不是以这种方式工作的......