繁体   English   中英

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

[英]java game loop. a little help to beginner

@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);
    }

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

gameImage.getGraphics();

仅将引用(不进行复制)传递给gameImage的内部Graphics。

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

public Graphics getGraphics(){
   return this.G;
}

如您所料...通过调用getGraphics,您只有图形的引用(指针)。

“图形”元素是程序的全局变量。 它可以管理所有图形 ,无论它们在哪里。 但是由于这是全局性的事情,因此您不能仅使用定义的变量(例如String),而必须从具有引用的现有对象中获取它。 例如,每个图像都有对图形对象的引用。 您拥有的变量g现在是对此元素的引用,可以使用它。 然后,在下一行中使用此参考来清除整个屏幕和先前创建的图像,以使它们不会渗入当前帧

(注意:这种解释可能不是100%准确,但这是它首先使我理解它的方式。)

暂无
暂无

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

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