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.

Vector :: Animation Ball auf Linie

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.