2017-05-12 4 views
0

Ich habe ein Bearbeitungsprogramm, das 100 Ringe anzeigen soll, jedes ein bisschen größer als das vorherige. Wenn ich mein Programm starte, wird 1 Ring angezeigt, der der größte ist. In diesem Fall 100px von der Mitte.obj erhält keine Variable

mein Code heren:

Car[] myCar = new Car[100]; 
void setup(){ 
    size(500,500); 
    noFill(); 
    for (int i = 0; i != myCar.length; i=i+1) { 
    myCar[i] = new Car(i); 
    } 
} 
void draw(){ 
    for (int i = 0; i != myCar.length; i=i+1) { 
    myCar[i].drive(); 
    myCar[i].display(); 
    } 
} 
class Car{ 
    int c; 
    Car(int c_){ 
    c = c_; 
    } 
    void drive(){ 
    c = c + 2; 
    } 
    void display(){ 
    background(255); 
    noFill(); 
    stroke(10); 
    ellipseMode(CENTER); 
    ellipse(width/2,height/2,1+c,1+c); 
    } 
} 

meine Frage ist: Warum ist nur der größte Ring angezeigt?

könnte es sein, dass

for (int i = 0; i != myCar.length; i=i+1) { 
    myCar[i] = new Car(i); 
} 

tut irgendwie die Variable geben "i" zu meinen Konstruktor. oder das bin ich nur dumm. ich weiß es nicht.

Dank im Voraus

+0

Sie können versuchen, Werte in die Konsole zu schreiben und dann zu überprüfen, ob sie korrekt sind. Wenn alles in Ordnung ist, stimmt Ihre Anzeige nicht. – Thomas

Antwort

0

Sie don "sehen sie t, denn wenn man myCar[i].display() rufen, dass Funktion alles löscht, die bereits auf dem Bildschirm und setzt background(255) und geht dann auf einen Ring zu ziehen. Dies hält passiert, und Sie sehen nur einen Ring, der größer und größer jeden Rahmen wächst.

entfernen Sie einfach background(255) aus der display() Funktion und machen es die erste Zeile des draw() und Sie haben die gewünschten Ergebnisse.

Nicht immer bu In den meisten Fällen wird background() entweder in setup() oder draw() aufgerufen, denn was es tut, ist jedes Pixel der Leinwand mit einer Farbe zu füllen, darüber nachzudenken.

Verwandte Themen