24. September 2013
Veränder das Beispiel nach folgenden Kriterien: 1. Der Pfad der Animation soll per Mausklick definiert werden 2. Der Ball soll sich vorwärts und rückwarts bewegen
PVector startPos = new PVector(); PVector endPos = new PVector(); int curTime = 0; int animSpeed = 5; int animTime = 2000; boolean drawFlag=false; boolean animDir = true; void setup() { size(640, 480); smooth(); } void draw() { background(51); // calc. the anim time if(animDir) curTime += animSpeed; else curTime -= animSpeed; if (curTime >= animTime) animDir = false; else if (curTime <= 0) animDir = true; // 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); } } int value = 0; //zählt Mausklicks void mousePressed() { value=value+1; if (value == 1) { drawFlag = true; curTime = 0; startPos.set(mouseX,mouseY,0); endPos = startPos.get(); } if (value == 2) { endPos.set(mouseX,mouseY,0); } }Mit Hilfe einer int Funktion, welche die Mausklicks zählt ist es möglich bei einem Klick den Startpunkt und bei einem weiteren, zweiten Klick den Endpunkt zu bestimmen. Das indem eine if-Abfrage nachschauen kann, wie gross der value-wert, resp. wie viel mal der Mausklick betätigt wurde. Um den Ball wieder zurück zu schicken zum Anfangspunkt nimmt man auch eine if, else Abfrage, welche Anstatt den Ball am Schluss wieder an den Anfangspunkt befördert, den Ball einfach rückwärts zum Startpunkt laufen lässt.