Java 2d游戏:渲染Q

Java 2d游戏:渲染Q,java,image,2d,rendering,frames,Java,Image,2d,Rendering,Frames,我正在用Java制作一个2d游戏,我对渲染有一些问题 我是否应该在每一帧重新绘制对象,尽管它们仍然可见或静止?如果没有,我将如何检测图像没有被更改,因此我不会渲染它?什么东西应该更新每个帧,以及什么类型的图像 多亏了在大多数情况下,最好在每一帧中唯一地渲染每个对象。如果要尝试找出以前渲染过的内容,通常计算该内容并渲染新对象所需的时间要比只清除每个帧的屏幕并渲染每个对象所需的时间要多 您可以考虑使用MP4文件之类的文件来执行操作,该文件将获取电影的每一帧,并且不会在同一区域中重新渲染相同颜色的像素

我正在用Java制作一个2d游戏,我对渲染有一些问题

我是否应该在每一帧重新绘制对象,尽管它们仍然可见或静止?如果没有,我将如何检测图像没有被更改,因此我不会渲染它?什么东西应该更新每个帧,以及什么类型的图像


多亏了

在大多数情况下,最好在每一帧中唯一地渲染每个对象。如果要尝试找出以前渲染过的内容,通常计算该内容并渲染新对象所需的时间要比只清除每个帧的屏幕并渲染每个对象所需的时间要多

您可以考虑使用MP4文件之类的文件来执行操作,该文件将获取电影的每一帧,并且不会在同一区域中重新渲染相同颜色的像素。这使得文件的大小变小了,但是如果你在游戏中尝试这样做的话,你基本上是在每一帧都使用MP4压缩算法


另一个问题是,如果某些对象保持静止,而其他对象围绕一帧移动。即使不是不可能,也很难清除屏幕上选定的几个对象。

是否使用图形类绘制对象?如果是这样,您不需要担心渲染单个帧,只要它们不发生更改;图形类会帮你做这些。如果使用Swing,则必须重写JComponent或其任何子类的paintComponentGraphics方法。如果您使用的是AWT,那么您将覆盖组件或其任何子类的paintGraphics g方法。我认为这大大降低了更新屏幕的难度。更新过程越复杂,就越需要单独渲染元素。记住,渲染是一个复杂的过程。除非您完全清除以前的渲染器,否则您只是在已经存在的渲染器的顶部进行绘制。您可以考虑使用分层方法。在这里,您可以识别静态内容层和活动内容层,并根据需要简单地在每个层的顶部呈现这些层。我之前删除的评论是不正确的。如果要确保看到更改,应该手动调用JComponent的repaint方法以确保立即更新。有时您不必这样做,但它不可靠,因此如果希望看到对象更新,您应该这样做。我使用Graphic类绘制对象,但当我使用Jframe的repaint方法时,它完全清除了任何想法?