2017-08-31 13 views
1

Hier ist ein Beispiel. Wenn der Code ausgeführt wird, werden die Methoden setup() und draw() aufgerufen und beeinflussen das Programm. Was ich nicht verstehe, ist die Tatsache, dass es keinen Methodenaufruf gibt.Kann jemand erklären, wie bestimmte Methoden aufgerufen werden, ohne aufgerufen zu werden?

Wie wird dies ermöglicht?

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

Es ist in der Javadoc erklärt. Lesen Sie es: https://processing.github.io/processing-javadocs/core/processing/core/PApplet.html –

+0

Ich lese es, aber auf meiner Ebene der Erfahrung macht es wenig Sinn.Ich würde eine Vereinfachung wenn möglich zu schätzen –

+3

Ein einfacher Trick, wenn Sie eine Klasse erweitern, denken Sie daran, dass es mehr als das, was Sie sehen. Ein Konstruktor wird in der Superklasse aufgerufen, er könnte "alles" machen. Im Allgemeinen hilft das Hinzufügen einer "@ Override" -Anmerkung zu jeder überschriebenen Methode (wie 'setup' und' draw') dabei, sich daran zu erinnern, dass diese Methode von der Superklasse aus zugänglich ist (weil in der Superklasse oder darüber definiert). – AxelH

Antwort

3

Aus dem Text & Tabellen:

"Das Setup() Funktion einmal aufgerufen wird, wenn das Programm startet."

Und Draw(): "Wird direkt nach dem Setup() aufgerufen und führt die in seinem Block enthaltenen Codezeilen fortlaufend aus, bis das Programm gestoppt oder noLoop() aufgerufen wird."

Dies wird aufgerufen, weil Ihre Klasse PApplet erweitert.

Sie können mehr über die Funktionen lesen here

+1

Dies erklärt noch nicht, wie die Methoden aufgerufen werden. –

2

Hier ist ein einfaches Beispiel dafür, was los ist:

Da MyDisplay haben keinen Konstruktor definiert, ein Standardkonstruktors wird durch erzeugt werden der Compiler. Dieser Konstruktor wird wie:

public MyDisplay(){ 
    super(); 
} 

Es benötigt wird, da die übergeordnete Klasse erzeugt werden müssen.

Wenn ich die Dokumentation von PApplet glauben die besagt, dass

Das Setup() Funktion einmal aufgerufen wird, wenn das Programm startet.

Und für draw

direkt nach dem Setup() aufgerufen“

Der Konstruktor wie (in einer einfachen Version)

aussehen könnte
public class PApplet{ 
    public PApplet(){ 
     setup(); 
     draw(); 
    } 

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

Hinweis: diejenigen Codes sind nicht die wirklichen, es könnte wirklich weit von der Wahrheit entfernt sein, aber das ist das Ausführungsmuster zu zeigen, nicht die Logik dahinter!

Dies bedeutet, dass beim Erstellen einer MyDisplay Instanz automatisch der Konstruktor PApplet aufgerufen wird, der diese beiden Methoden ausführt. Methode, die in MyDisplay überschrieben wird.

Ein guter Rat ist, die Anmerkung @Override zu beiden Methoden hinzuzufügen, um zu bemerken, welche Methode von oben ausgeführt werden könnte, weil diese definiert und überschrieben werden.

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

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

} 
Verwandte Themen