7. November 2010
Aufgabe 6a In dieser Lektion mussten wir zwei Aufgaben lösen. Zum Einen mussten wir zu den drei bestehenden Planeten die Erde hinzufügen. Diese sollte aber freigestellt sein (keine weissen Ränder mehr) und sollte an der Maus hängen / somit verschiebbar sein. Hier schnitt ich zuerst im Photoshop die Erde aus ihrem bestehenden File aus und speicherte es als PNG mit transparentem Hintergrund. Nun baute ich es in den Code ein. Ausgangslage: Meine Lösung: Code:PImage[] imageList = null; // variable sauber initialisieren void setup() { size(600,600); // def. fenstergroesse imageList = new PImage[4]; imageList[0] = loadImage("./images/1.jpg"); imageList[1] = loadImage("./images/2.jpg"); imageList[2] = loadImage("./images/3.jpg"); imageList[3] = loadImage("./images/4.png"); } void draw() { background(255); pushMatrix(); translate(10,100); for(int i=0;i < 3; i++) { image(imageList[i],0,0,140,140); translate(150,0); } popMatrix(); image(imageList[3],mouseX -60, mouseY -50,120,120); }________________________________________ Aufgabe 6b Dies ist die zweite Aufgabe in dieser Lektion. Wir sollten aus dem bestehenden File (Kugel die einem Pfad folgt, den man mit der Maus zieht). Das Ziel war es, dass wir einen festen Pfad mit zwei Mausklicks bestimmen sollten auf welchem die Kugel hin und her fahren sollte. Diese Aufgabe war nicht sehr einfach. Ich musste mich zuerst mit dem bestehenden Code auseinandersetzen um zu verstehen, wo welche Funktionen programmiert wurden. Schlussendlich hat es dann aber doch geklappt : Hier der Code:
PVector startPos = new PVector(); PVector endPos = new PVector(); int curTime = 0; int animSpeed = 10; int animTime = 2000; boolean drawFlag=false; boolean mausklick1=false; // festgelegte Variable void setup() { size(640, 480); smooth(); } void draw() { background(51); // calc. the anim time curTime += animSpeed; if((curTime >= animTime) || (curTime <= 0)) // wenn curTime grösser als animTime ODER curTime kleiner als 0 ist füre dies aus: { animSpeed = animSpeed * -1; // wird zum Umdrehen gebraucht } // calc. the current time in the animation float normTime = curTime * 1.0 / animTime; if(drawFlag) { stroke(255); line(startPos.x,startPos.y, endPos.x,endPos.y); // calculate the position of the circle on the line PVector dir = PVector.sub(endPos,startPos); PVector pos = PVector.add( startPos , PVector.mult(dir,normTime)); ellipse(pos.x,pos.y, 20,20); } } void mousePressed() { if(mausklick1 == false) // wird überprüft ob die Maus noch nicht gedrückt wurde { mausklick1 = true; // setzt die Variable auf "true"; Maus wurde gedrückt drawFlag = true; // Drawflag fird auf "true" gesetzt; curTime = 0; // curTime wird auf 0 gesetzt startPos.set(mouseX,mouseY,0); // speichert die Koordinaten der Maus endPos = startPos.get(); // endPos wird durch startPos ersetzt resp. der Wert übernehmen. } else { // wenn mausklick1 bereits "true" ist, wird es hier wieder auf "false" gesetzt mausklick1 = false; endPos.set(mouseX,mouseY,0); } }