2017-08-31 31 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() 
    { 
     ... 
    } 

} 
相关问题