Speed met vectoren

Wat doen we in deze opdracht?

  • Kennismaken met de PVector Class
  • Een begin met object-oriented programming (= de Class gebruiken)
  • Een tijdelijke variabele gebruiken

Waarom Vectoren?

In de vorige opdracht hebben we speedX en speedY als aparte variabelen neergezet. Leuk. Maar dat slaat eigenlijk helemaal nergens op. Er is maar 1 speed. Hetzelfde eigenlijk voor de locatie X en Y: het is altijd de combinatie.

Bij Processing hadden ze dat natuurlijk ook bedacht en daarom hebben ze de “Vector”. Een Vector is een pijl: het heeft een grootte en een richting. Denk maar aan de windrichting bij Golf.

De wind is 7 mijl per uur in je rug: windje mee!

 

In Processing heet deze vector een PVector:

  • Hij heeft een X
  • Hij heeft een Y
  • Omdat het een “class” is, zijn er allerlei functies voorgebakken die alleen werken op “members” van deze class. Vectoren optellen en aftrekken, dat soort dingen.  Dat werkt makkelijk voor onze Location en Velocity dus.
  • Moeilijk? Vraag je wiskunde-leraar om extra uitleg. Snap dat het eigenlijk Havo-zoveel stof is maar ja boeieeieen je kan het! Of, zoek leer zelf lekker verder bij de Khan Academy.

De Code


PVector location;
PVector velocity;
/* (1) maak een PVector om de velocity in te parkeren */
boolean onPause;

void setup() {
size(640,360);
location = new PVector(100,100);
velocity = new PVector(12,5);
/* (2) geef een beginwaarde voor je tijdelijke variabele */
onPause = false;
}

void draw() {
background(255);

/* hier zie je hoe makkelijk je de location en velocity
kunt optellen dankzij de PVector class */
location = location.add(velocity);

if ((location.x > width) || (location.x <0 )) {
velocity.x = velocity.x * -1;
}
if ((location.y > height) || (location.y <0 )) {
velocity.y = velocity.y * -1;
}
stroke(0);
fill(175);
ellipse(location.x,location.y,32,32);
}

void keyPressed() {
if ((key == ' ') && (onPause == false)) {
// we gaan nu pauzeren
onPause = true;
/* (3) bewaar je velocity in een tijdelijke variabele
voordat je m op 0 zet */
velocity = new PVector(0,0,0);
} else if ((key == ' ') && (onPause == true)) {
// pauze is afgelopen, starten maar weer
onPause = false;
/* (4) zet hier je oude velocity weer terug */
}

}

Opdracht: Maak een pauze-knop van de spatie-balk

  • Download deze code of gebruik bovenstaande.
  • Kijk hoe makkelijk we velocity.x en location.y kunnen gebruiken als deze twee PVectors zijn.
  • We gaan de pauze knop maken. Stoppen is makkelijk. Velocity.x en Velocity.y op 0.
  • Hoe gaan we nu weer herstarten?
  • Maak een nieuwe variabele bijv. velocityMem (van memory) om de velocity in te stoppen voordat ie op 0 gaat. (1)
  • Geef een beginwaarde op voor deze variabele (2) Tip: doe alles 0.
  • Bewaar je velocity in een tijdelijke variabele voordat je m op 0 zet (3)
  • Zet de velocity weer terug bij (4)