2017-08-31 61 views
1

這裏是一個例子。代碼運行時,將調用setup()draw()方法並影響程序。我不明白的是沒有方法調用的事實。有人可以解釋如何調用某些方法而不被調用嗎?

這是如何做到的?

import processing.core.PApplet; 


public class MyDisplay extends PApplet { 

    public void setup() 
    { 
     size(400, 400); 
     background(200, 200, 200); 

    } 

    public void draw() 
    { 
     fill(255, 255, 0); 
     ellipse(200, 200, 390, 390); 
     fill(0, 0, 0); 
     ellipse(120, 130, 50, 70); 
     ellipse(280, 130, 50, 70); 

     noFill(); 
     arc(200, 280, 75, 75, 0, PI); 
    } 

} 
+0

這是在javadoc解釋。請閱讀:https://processing.github.io/processing-javadocs/core/processing/core/PApplet.html –

+0

我讀過它,但在我的經驗水平上,它幾乎毫無意義。如果可能的話,我會盡量簡化 –

+3

一個簡單的技巧,當你擴展一堂課時,請記住,除了你看到的東西還有更多。一個構造函數將在超類中被調用,它可以做任何事情。通常,爲每個重寫方法(如'setup'和'draw')添加一個'@ Override'註釋可以幫助記住那些方法可以從超類中訪問(因爲定義在超類或更高類中)。 – AxelH

回答

3

從文檔:

「()在程序啓動時函數被調用一次的設置。」

And Draw():「在setup()之後直接調用並連續執行塊中包含的代碼行,直到程序停止或調用noLoop()。

這是因爲您的類擴展了PApplet而引發的。

你可以閱讀更多有關職能here

+1

這仍然不能解釋如何調用方法。 –

2

這裏是正在發生的事情的一個簡單的例子:

由於MyDisplay沒有任何構造函數定義的,默認的構造函數將生成編譯器。此構造函數將如下所示:

public MyDisplay(){ 
    super(); 
} 

由於需要生成超類,因此它是必需的。

如果我相信PApplet的文檔說明該程序啓動時

的設置()函數被調用一次。

而對於draw

()

安裝後直接調用」

的構造可能看起來像(一個簡單的版本)

public class PApplet{ 
    public PApplet(){ 
     setup(); 
     draw(); 
    } 

    public void setup(){} 
    public void draw(){} 
} 

注:這些代碼不是真正的,它可能真的很不真實,但這是爲了顯示執行模式,不是它背後的邏輯!

這意味着當構建一個MyDisplay實例時,它將自動調用PApplet的構造函數來執行這兩種方法。在MyDisplay中被覆蓋的方法。

一個好的建議是將註釋@Override添加到兩個方法中,以輕鬆注意到可以從上面執行哪些方法,因爲這些方法是定義和重寫。

public class MyDisplay extends PApplet { 
    @Override 
    public void setup() 
    { 
     ... 
    } 

    @Override 
    public void draw() 
    { 
     ... 
    } 

} 
相關問題