6. Bevegelse

Skolekoding.no > Tekstkoding > p5.js > Kurs > 6. Bevegelse


6.1 Bildehastighet

p5.js gjentar koden som står inne i draw() om og om igjen. På samme måte som en i en tegnefilm. Standard hastighet er 60 ganger i sekundet. Hvis koden tar lang tid å gjennomføre, kan det hende at bildehastigheten går ned.

Skriv dette i editoren:

  • function setup() {
    • createCanvas (600, 400);
  • }
  • function draw() {
    • ellipse (mouseX, mouseY, 20, 20);
  • }
Sirkelen følger musepekeren. En ny sirkel tegnes for hver runde i draw(). Når musepekeren flyttes raskt blir avstanden mellom sirklene større.



Vi kan endre hastigheten ved å bruke funksjonen frameRate(). Setningen frameRate(1) inne i setup(), vil sette bildehastigheten til ett bilde i sekundet.


6.2 Bevegelseshastighet og retning

En figur tegnes med utgangspunkt i en x- og en y-koordinat. For å få til bevegelse må koordinatene endres for hver runde i draw().

Hvis x-verdien økes, beveger figuren seg mot høyre.
Hvis økningen er stor, blir hastigheten høy.


6.3 Fra venstre mot høyre

Skriv dette i editoren:

  • let x = 0;
  • let speed = 5;
  • let radius = 50;
  • function setup() {
    • createCanvas(600, 400);
  • }
  • function draw() {
    • background(240); // lerretet blankes ut for hver runde i draw()
    • x = x + speed; // for hver runde i draw vil x få en ny verdi som er lik den forrige verdien + verdien av speed
    • fill(0);
    • circle(x, height / 2, radius);
  • }​

For å etterlate bevegelsesspor kan man tegne et rektangel med en en viss grad av gjennomskinnelighet, i stedet for å bruke background().

Bytt ut

  • background(240;

med

  • fill(240, 10); // Hvitt med lav fyllgrad (10) dvs. stor gjennomskinnelighet
  • rect(0, 0, width, height); // Rektangel i helle lerretets størrelse

6.4 Rundt og rundt

For å få sirkelen til å dukke opp igjen i venstre kant sjekker vi om x-verdien er størrre enn bredden og begynner på nytt.

Skriv dette i editoren:

  • let radius = 40;
  • let x = – radius; 
  • let speed = 4.5; 
  • function setup() {
    • createCanvas(600, 400);
  • }
  • ​function draw() {
    • background(255); 
    • x = x +speed; 
    • if (x > width) { 
      • x = 0; 
    • }
    • fill(0);
    • circle(x, height / 2, radius);
  • }
Det hvite feltet viser lerretet. Det grå er utenfor lerretet. Den røde sirkelen har en x-verdi som er mindre enn null. Den mørkeblå sirkelen har en x-verdi som er større enn bredden av lerretet.

6.5 Oppgave

Endre programmet over slik at sirkelen beveger seg helt utenfor lerretet før den forsvinner. Den skal heller ikke poppe opp halvveis over kanten på venstre side.


6.6 Sprette tilbake fra kanten

Skriv dette i editoren:

  • let radius; 
  • ​let x; 
  • let xSpeed;
  • function setup() {
    • createCanvas(600, 400);
    • radius = 40;
    • x = 100; 
    • xSpeed = 4.5;
  • }
  • ​function draw() {
    • background(255); 
    • x = x + xSpeed;
    • if ((x > width – radius) || (x < radius))  { // ved høyre kant eller ved venstre kant
      • xSpeed =xSpeed * -1 ; // retningen byttes om
    • }
    • fill(0);
    • circle(x, height / 2, radius);
  • }

6.7 Oppgaver

A) Lag en skisse der sirkelen beveger seg oppover lerretet.

B) Lag en skisse der sirkelen beveger seg på skrå.

C) Lag en skise der sirkelen beveger seg på skrå og spretter tilbake ved kanten.

D) Lag et program der en ball slippes, og spretter når den treffer nedre kant av lerretet, for så å falle ned igjen. Klarer du å få ballen til å sprette mindre og mindre på samme måte som en virkelig sprettball?

Hint: bruk en variabel for fart og en for akselerasjon, og ikke tenk på at dette nødvendigvis foregår her på jorda. Farten er forflytningen langs y-aksen i hver runde i draw(). Akselerasjonen er hvor mye  forflytningen øker for hver runde i draw) etter hvert som ballen faller mot bakken.


6.6 Tilfeldig bevegelse

Ved å bruke random() får vi tilfeldige verdier.

let t = random(10); gir variabelen «t» tilfeldige verdier mellom 0 og 10 (aldri eksakt null og aldri eksakt ti).

let t = random(-1, 1) gir «t» tilfeldige verdier mellom -1 og 1.

Ved å legge til en tilfeldig verdi til x og y,  kan vi få en figur til å bevege seg tilfeldig over skjermen.

  • xSpedd = random(-4, 4);
  • ySpeed = random(-4, 4);

6.7 Oppgaver

A) Lag en sirkel som beveger seg med små steg tilfeldig rundt på skjermen.

B) For å holde sirkelen innenfor lerretet kan vi bruke constrain()

  • x = constrain(x, 10, 20);

Her hindrer constrain() x-verdien i å bli mindre enn 10 eller større enn 20. Legg inn constrain() i koden fra oppgave A slik at sirkelen holder seg innenfor lerretet.


skolekoding.no
Stein Olav Kivle