繁体   English   中英

摆动渲染…是否总是必须要repaint()和paintComponent()?

[英]Swing rendering… does it always have to be repaint() and paintComponent()?

在我的程序中,我将Swing窗口用于GUI,并且我知道应该使用repaint和paintComponent方法来渲染swing组件。 我也有几个需要在主窗口内呈现的自定义类对象。 为了便于理解,我的程序是一款游戏,其中包含每秒需要渲染60次的运动对象。

在我观看的游戏开发教程中,该人员将Jframe与Canvas结合使用,但是他没有使用paintComponent方法。 他只是简单地创建了自己的render()方法,即可使用从创建bufferStrategy时获得的图形上下文来绘制所有图形。

因此,如果这行得通(行之有效),为什么每个人都说要使用paintComponent方法,它们之间到底有什么区别?

如果要使用paintComponent的处理方式,该如何使用bufferStrategy?

在我观看的游戏开发教程中,该人员将Jframe与Canvas结合使用,但是他没有使用paintComponent方法。 他只是简单地创建了自己的render()方法,即可使用从创建bufferStrategy时获得的图形上下文来绘制所有图形。

Canvas是一个AWT组件,使用BufferStrategy ,您可以接管绘画过程,并负责更新Graphics上下文并计划将其推送到硬件/屏幕。

这通常被称为“活动绘画”,因为您不断更新缓冲区(以恒定的帧速率进行假设)。

Swing使用被动绘制过程,因此您永远不知道何时可能发生绘制过程。 Swing有自己的机制来确定应重新粉刷的内容和时间。 使用repaint ,您可以向这些机制请求repaint组件,但不能保证因此会启动绘制循环。

如果您使用任何Swing组件进行绘画,则必须使用repaintpaintComponent ,因为Swing负责提供可以在其上绘画的上下文。

如果要使用Canvas ,则可以改用BufferStrategy

本质上,它们是绘画的不同方法。 但是请记住,如果使用BufferStrategy ,则会丢失所有Swing API,因此不能将Swing组件与这种方法一起使用,因为它们并非旨在以这种方式工作...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM