java游戏循环。对初学者有点帮助

java游戏循环。对初学者有点帮助,java,graphics,awt,Java,Graphics,Awt,这是游戏循环的一个片段。书中关于它如何工作的一点解释。在prepareGameImage()中,我们通过创建并初始化gameImage变量(宽度为gameWidth,高度为gameHeight)来准备屏幕外图像。(我不知道这是如何工作的--->)接下来,在每一帧上,我们使用大小相等的矩形清除此图像,以清除上一帧中绘制到屏幕上的所有图像。这可确保前一帧的图像不会流入当前帧。每一帧都重新开始。 我不明白的是片段的最后两行。gameImage.getGraphics()的值存储在图形变量g中。方法g.

这是游戏循环的一个片段。书中关于它如何工作的一点解释。在prepareGameImage()中,我们通过创建并初始化gameImage变量(宽度为gameWidth,高度为gameHeight)来准备屏幕外图像。(我不知道这是如何工作的--->)接下来,在每一帧上,我们使用大小相等的矩形清除此图像,以清除上一帧中绘制到屏幕上的所有图像。这可确保前一帧的图像不会流入当前帧。每一帧都重新开始。
我不明白的是片段的最后两行。
gameImage.getGraphics()的值存储在图形变量
g
中。方法
g.clearRect(0,0,gameWidth,gameHeight)
应该只影响变量
g
,而不应该影响由
gameImage.getGraphics()生成的值
您能否解释最后两行代码是如何执行任务的?“前一帧的图像不会渗入当前帧”:(:(
谢谢

@Override
    public void run() {
            while (running) {
                    currentState.update();
                    prepareGameImage();
                   // next line draws image(frame) to the screen
                    currentState.render(gameImage.getGraphics()); 
                    repaint();                      
            }

            // End game immediately when running becomes false.
            System.exit(0);
    }


    private void prepareGameImage() {
            if (gameImage == null) {
                    gameImage = createImage(gameWidth, gameHeight);
            }

            Graphics g = gameImage.getGraphics();
            g.clearRect(0, 0, gameWidth, gameHeight);
    }
仅将参照(不复制)传递到gameImage的内部图形

假设gameImage是某个类A的实例,该类有一个Graphics G类型的私有变量。 并具有访问该变量的方法:

gameImage.getGraphics();
正如您可以通过调用getGraphics来使用…一样,您只有一个指向图形的引用(指针)。

图形元素是程序的全局元素。它管理所有的图形,无论它们在哪里。但由于它是全局元素,所以不能仅使用定义的变量(例如字符串),而必须从具有引用的现有对象获取它。例如,每个图像都有一个引用到图形对象。变量g现在是对该元素的引用,可以使用它。然后在下一行中使用该引用清除整个屏幕和以前创建的图像,以便它们不会渗入当前帧中


(注意:这个解释可能不是100%准确,但这正是它让我首先理解它的原因。)

谢谢帮助。如果我能选择两个正确答案,我会这样做,但我只能选择一个“最”正确的答案:(不用担心,但我希望我的解释能有所帮助:)
public Graphics getGraphics(){
   return this.G;
}