2017-08-15 5 views
0

Ich versuche, zufällige Farben jedes Mal, wenn eine Taste gedrückt wird, zu generieren. Ich nahm Code von diesem Beispiel: http://learningprocessing.com/examples/chp14/example-14-18-solar-system-OOPVerarbeitung: Hinzufügen von zufälligen Farben zu Ellipse in Klasse

Ich habe es für mein eigenes Projekt justiert, aber ich habe eine harte Zeit, die Füllung jedes Mal ändern, wenn eine Taste gedrückt wird. (Ich habe versucht, es hier einfügen, aber die Formatierung gehalten vermasselt, so dass ich es auf Pastebin)

Klasse File: https://pastebin.com/HiBXdA4A

Haupt Datei:

boolean colorChange = false; 

// An array of 8 planet objects 
Planet[] planets = new Planet[30]; 
ArrayList<Planet> newPlanets = new ArrayList<Planet>() ; 

void setup() { 
    //size(900, 900); 
    fullScreen(); 

    // The planet objects are initialized using the counter variable 
    for (int i = 0; i < planets.length; i++) { 

    planets[i] = new Planet(185 + i*5, 8); 

    } 

} 

void draw() { 
    background(0); 

    /* Stars */ 
    randomSeed(103); 

    for (int i = 0; i < 300; i++) { 
    float x = random(0, width); 
    float y = random(0, height); 

    ellipse(x, y, 2, 2); 
    fill(255); 
    } 

    // Drawing the Earth 
    pushMatrix(); 
    translate(width/2, height/2); 
    stroke(0); 
    fill(0, 191, 255); 
    ellipse(0,0,350,350); 
    noFill() ; 
    // Drawing all Planets 
    for (int i = 0; i < planets.length; i++) { 
    planets[i].update(); 
    planets[i].display(); 
    } 

    if(newPlanets.size() > 0) { 
     for(int i = 0 ; i < newPlanets.size() ;i++) { 
     println("newPlanets should be drawing") ; 
     Planet p = newPlanets.get(i) ; 
     p.update() ; 
     p.display() ; 
     } 
    } 


    popMatrix(); 

    fill(255, 0, 0); 
    text("[Press E for Air Pollution]", width/9, height - (height/8)); 
    fill(255, 255, 0); 
    text("[Press W for Ground Level Pollution]", width/9, height - (height/8 + 15)); 
    fill(0, 255, 0); 
    text("[Press Q for Greenhouse Gasses]", width/9, height - (height/8 + 30)); 
} 

void keyPressed() { 
    if(key == 'q' || key == 'Q') { 
     for(int i = 0 ; i < planets.length ; i++) { 
     newPlanets.add(new Planet(185 + i*5, 8)); 
     } 
    } 

    if(key == 'w' || key == 'W') { 
     for(int i = 0 ; i < planets.length ; i++) { 
     newPlanets.add(new Planet(185 + i*5, 8)) ; 
     } 
    } 

    if(key == 'e' || key == 'E') { 
     for(int i = 0 ; i < planets.length ; i++) { 
     newPlanets.add(new Planet(185 + i*5, 8)); 
     } 
    } 

} 

Klasse Datei:

// Example 14-18: Object-oriented solar system 

class Planet { 
    // Each planet object keeps track of its own angle of rotation. 
    float theta;  // Rotation around sun 
    float diameter; // Size of planet 
    float distance; // Distance from sun 
    float orbitspeed; // Orbit speed 
    float resetingDistance ; 
    color planetColor; 
    boolean colorChange = false; 


    Planet(float distance_, float diameter_) { 
    distance = distance_; 
    resetingDistance = distance_ ; 
    diameter = diameter_; 
    theta = 0; 
    orbitspeed = random(0.01, 0.03); 
    //planetColor = color(random(255), random(255), random(255), random(255)); 
    } 

    void update() { 
    // Increment the angle to rotate 
    theta += orbitspeed; 
    } 

    void display() { 
    // Before rotation and translation, the state of the matrix is saved with pushMatrix(). 
    pushMatrix(); 
    // Rotate orbit 
    rotate(theta); 
    // Translate out distance 
    translate(distance, 0); 
    stroke(0); 
    fill(175); 

    if (colorChange == true) { 
     //fill(random(255), random(255), random(255), random(255)); 
     planetColor = color(random(255), random(255), random(255), random(255)); 
    } 

    ellipse(0, 0, diameter, diameter); 
    // Once the planet is drawn, the matrix is restored with popMatrix() so that the next planet is not affected. 
    popMatrix(); 
    } 
} 
+0

Also ändern Sie die "planetColor" unter einer Bedingung, colorChange, aber Sie scheinen die colorChange Variable nicht zu ändern, und Sie verwenden nicht die Variable "planetColor" überall - es sei denn, ich vermisse etwas. – Stefan

+0

Und wenn Sie herausgefunden haben, wie man colorChange einstellt, wenn eine Taste gedrückt wird, denken Sie daran, die Variable zurückzusetzen, wenn die PlanetColor ihren neuen Wert erhält. – Stefan

Antwort

0

Sie sollten nicht einfach den Code kopieren und einfügen, den Sie im Internet finden, und dann versuchen, ihn zu überspringen. Sie werden sich nur eine Menge Kopfschmerzen auf diese Weise geben. Stattdessen müssen Sie wirklich genau wissen, was jede Zeile macht, und dann eine neue Skizze erstellen und diese Lektionen nehmen, um Ihr Ziel zu erreichen.

Sie müssen break your problem down into smaller steps und dann diese Schritte nacheinander durchführen. Können Sie beispielsweise eine einfache Skizze erstellen, die nur eine zufällige Farbe zeigt? Okay, können Sie diese Farbänderung jetzt vornehmen, wenn der Benutzer einen Schlüssel eingibt?

Der grundlegende Ansatz Sie nehmen müssen, ist dies:

  • Shop die Farbe in einer Reihe von Variablen.
  • Verwenden Sie diese Variablen, um Ihre Szene zu zeichnen.
  • Ändern Sie diese Variablen, wenn der Benutzer etwas unternimmt.

dass der allgemeine Ansatz ist, und in Ihrem Fall werden Sie wahrscheinlich diese Variablen in Ihrer Planet Klasse gespeichert werden sollen, so dass jeder Planet seine eigene Farbe haben kann.

Hier ist ein kleines Beispiel, dass dieser Ansatz folgt eine zufällige Farbe zu zeigen, wenn der Benutzer mit der Maus klickt:

<script src="https://cdnjs.cloudflare.com/ajax/libs/processing.js/1.6.6/processing.js"></script> 
 
<script type="application/processing"> 
 

 
float r = 128; 
 
float g = 128; 
 
float b = 128; 
 

 
void setup(){ 
 
    size(300, 200); 
 
} 
 

 
void draw(){ 
 
    background(r, g, b); 
 
} 
 

 
void mousePressed(){ 
 
    r = random(256); 
 
    g = random(256); 
 
    b = random(256); 
 
} 
 
</script> 
 
<canvas> </canvas>

Dieser Code ist nur ein Beispiel, aber es zeigt, wie Sie Verwenden Sie den obigen Ansatz, um Dinge zu ändern, wenn der Benutzer eine Aktion ausführt. Ich empfehle dringend, dass Sie mit einer einfachen Skizze wie dieser neu beginnen und eine MCVE veröffentlichen, wenn Sie nicht weiterkommen. Viel Glück.

Verwandte Themen