Java - 获取图形
Java - get Graphics
我正在制作 java 摇摆游戏。我听说 swing 组件不使用主动渲染(你只能覆盖绘制方法),因此,我一直在使用 BufferStrategy with Canvas。现在我发现了 JComponent 和 JPanel 的 getGraphics()
方法。如果我们可以在 swing 组件中进行主动渲染,为什么游戏教程仍然覆盖 paint()
和 paintComponent()
?
永远不要使用 getGraphics
,它可以 return null
,只不过是最后一个绘画周期的快照。
您在其上绘制的任何内容都将在下一个绘制周期中移除。在 Swing 中,您无法控制绘制过程,并且可以出于多种原因启动绘制周期,其中许多原因您无法控制或不会收到通知(除了调用绘制时)
基本答案是,如果您想控制绘制过程,则必须使用 BufferStrategy
或实现您自己的屏幕外绘制例程。没有任何方法可以在 Swing 中实现真正的主动绘画过程 API,你可以在一定程度上伪造它,但是 Swing 仍然能够在它认为合适的时候执行它自己的绘画周期。
查看 Painting in AWT and Swing and Performing Custom Painting 了解有关 Swing 绘画工作原理的更多详细信息
我正在制作 java 摇摆游戏。我听说 swing 组件不使用主动渲染(你只能覆盖绘制方法),因此,我一直在使用 BufferStrategy with Canvas。现在我发现了 JComponent 和 JPanel 的 getGraphics()
方法。如果我们可以在 swing 组件中进行主动渲染,为什么游戏教程仍然覆盖 paint()
和 paintComponent()
?
永远不要使用 getGraphics
,它可以 return null
,只不过是最后一个绘画周期的快照。
您在其上绘制的任何内容都将在下一个绘制周期中移除。在 Swing 中,您无法控制绘制过程,并且可以出于多种原因启动绘制周期,其中许多原因您无法控制或不会收到通知(除了调用绘制时)
基本答案是,如果您想控制绘制过程,则必须使用 BufferStrategy
或实现您自己的屏幕外绘制例程。没有任何方法可以在 Swing 中实现真正的主动绘画过程 API,你可以在一定程度上伪造它,但是 Swing 仍然能够在它认为合适的时候执行它自己的绘画周期。
查看 Painting in AWT and Swing and Performing Custom Painting 了解有关 Swing 绘画工作原理的更多详细信息