2. Oktober 2013
Planeten: An der Aufgabe habe ich nichts kreativ erweitert. Ich habe einfach das Bild hereingeladen und mit translate an mousX und mouseY befestigt. Die anderen Planeten habe ich auskommentiert. Animation – Ball auf einer Linie: Wir bekamen einen Code. Mit diesem Code konnten wir bei drücken der Maustaste und gleichzeitigem ziehen eine Linie erstellen, auf der sich ein Ball in Richtung der Maus bewegt. Wir sollten diesen Code so verändern, dass die Linie erst beim zweiten Mausklick sichtbar wird, sie aber vom ersten Mausklick zum zweiten geht. Zusätzlich soll sich der Ball immer von einem Punkt zum anderen bewegen. Ich habe die Aufgabe mit einem clickCount gelöst. Das hin und her gehen des Balls habe ich mit einer Sinusfunktion gelöst.PVector startPos = new PVector(); PVector endPos = new PVector(); int curTime = 0; int animSpeed = 25; int animTime = 2000; boolean drawFlag=false; int clickCount = 0; void setup() { size(640, 480); smooth(); } void draw() { background(51); // calc. the anim time curTime += animSpeed; // -> curTime = curTime + animSpeed /*if (curTime >= animTime) curTime = 0;*/ // 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, (sin(normTime)+1)/2)); ellipse(pos.x, pos.y, 20, 20); } } void mousePressed() { if (clickCount == 0) { drawFlag = false; curTime = 0; startPos.set(mouseX, mouseY, 0); clickCount =+ 1; } else if (clickCount == 1) { drawFlag = true; curTime = 0; endPos.set(mouseX, mouseY, 0); } } /* void mouseDragged() { endPos.set(mouseX,mouseY,0); } void mouseReleased() { drawFlag = false; println("released"); } */Da dieses Ergebnis nicht besonders elegant war, war ich sehr dankbar, dass wir für diese Aufgabe noch eine Musterlösung von Max bekamen. Klassen – Bouncing Ball Ich habe diese Aufgabe grundsätzlich so gelöst, wie es in der Aufgabestellung gefragt war und nur in diesem Sinne kreativ erweitert, dass ich dem Programm gesagt habe, dass immer wenn sich der Ball am Rand der Spielfläche befindet ein Bild von Staub geladen werden soll. So sieht es aus, als würde jedes Mal Staub aufwirbeln, wenn der Ball an einer Seite aufprallt.
/* -------------------------------------------------------------------------- * SvgBallExample * -------------------------------------------------------------------------- * prog: Max Rheiner * date: 03/1/2011 (m/d/y) * ---------------------------------------------------------------------------- */ BouncingBall ball1; BouncingBall ball2; FootBall ball3; PVector p1 = new PVector(); PVector p2 = new PVector(); boolean drag = false; void setup() { size(800, 600); ball1 = new BouncingBall(100, 100); ball2 = new BouncingBall(50, 50); ball3 = new FootBall(40); // svg bild soll zentriert sein shapeMode(CENTER); smooth(); } void draw() { // hintergrund loeschen //background(255); // ghosting fill(255, 255, 255, 60); rect(0, 0, width, height); if (drag) { // zeichne die abschussrichtung p1.set(ball1._pos.x, ball1._pos.y, 0); line(p1.x, p1.y, p2.x, p2.y); } // zeichne den ball ball1.draw(); ball2.draw(); ball3.draw(); } void mousePressed() { drag = true; p1.set(ball1._pos.x, ball1._pos.y, 0); p2.set(mouseX, mouseY, 0); } void mouseDragged() { p2.set(mouseX, mouseY, 0); } void mouseReleased() { drag = false; // abschuss staerke berechnen PVector dir = PVector.sub(p2, p1); // laenge verkuerzen dir.mult(.09); // der ball wird neu ausgerichtet ball1.set(p1, dir, .993); ball2.set(p1, dir, .97); ball3.set(p1, dir, .95); }