Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

22.09.2013 – Planeten, Animation und Klassen

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. Bildschirmfoto 2013-10-01 um 13.47.23

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. Bildschirmfoto 2013-10-01 um 13.56.01

/* --------------------------------------------------------------------------
 * 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);
}