簡體   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