有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Swing渲染。。。它是否总是必须是repaint()和paintComponent()?

在我的程序中,我将Swing窗口用于GUI,我知道我应该使用重绘和paintComponent方法来渲染Swing组件。我还有几个需要在主窗口内渲染的自定义类对象。为了便于理解,我的程序是一个游戏,需要每秒渲染60次移动对象

在我观看的一个游戏开发教程中,这家伙使用了带有画布的Jframe,但他没有使用paintComponent方法。他只是简单地创建了自己的render()方法,使用从创建缓冲策略中获得的图形上下文绘制所有图形

那么,如果这是可行的(确实如此),为什么每个人都说要使用paintComponent方法?它们之间到底有什么区别

如果我使用paintComponent方式做事,我将如何使用bufferStrategy


共 (1) 个答案

  1. # 1 楼答案

    In a game development tutorial I watched, the guy used a Jframe with Canvas, but he didn't use the paintComponent method. He simply made his own render() methods to draw all the graphics using graphics context he obtained from creating a bufferStrategy.

    Canvas是一个AWT组件,使用BufferStrategy,您接管绘制过程,并负责更新Graphics上下文,并安排将其推送到硬件/屏幕

    这通常被称为“活动绘制”,因为你会不断地(假设帧速率不变)更新缓冲区

    Swing使用被动绘制过程,因此您永远不知道何时可能会发生绘制过程。Swing有自己的机制来决定应该重新绘制什么以及何时重新绘制。使用repaint,您可以向这些机制请求重新绘制组件,但不能保证绘制周期会因此启动

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

    如果您想使用Canvas,那么可以使用BufferStrategy

    本质上,它们是不同的绘画方法。但是请记住,如果您使用BufferStrategy,您将失去所有Swing API,您不能用这种方法使用Swing组件,因为它们不是设计为以这种方式工作的