Spil Hop

Fra Holstebro HTX Wiki
Skift til: navigering, søgning

Eksemplet her er en udvidelse af koden i Objekter i Bevægelse.

Eksemplet arbejder med en konstant X-hastighed, der er baseret på Processings frameRate, og Y-hastigheden ændres ved hjælp af acceleration.

Programmets visning af Tyngdeacceleration

Flytningen af objektet sker ved at man lægger en Hastigheds-værdi til både posX og posY. Ved at det sker hver gang skærmen opdateres, så vil det se ud som en jævn bevægelse - dog er frameraten sat lavt, så man kan følge med i tallene, og derfor virker det som om det hakker - bare en frameRate på 30 ville gøre at det ser rimeligt jævnt ud.

I dette eksempel ændres ikke på hastigheden i X-retningen, andet end at den sættes til modsat fortegne når den rammer en væg.

Det der illustreres her er at hastigheden i Y-retningen ændres. Efter samme princip som at man kan få en hastighed ved at ændre positionen med en bestemt størrelse pr. tidsenhed (hastighed er meter pr. sekund), så kan man opnå en acceleration ved at ændre hastigheden (m/s) med en bestemt størrelse (acceleration er meter pr. sekund i anden). Når bolden træffer bunden af skærmen, så vendes fortegnet på hastigheden. På dette tidspunkt kommer den nedad med en positiv hastighed, der så bliver negativ igen, så bolden bevæger sig opad.

I eksemplet startes objektet i bunden af skærmen med en negativ hastighed, men da en skærms koordinatsystem vender med den positive Y-akse nedad, så vil den med negativ hastighed bevæge sig opad. Da accelerationen skal være nedadrettet, så er det en positiv acceleration, hvilket giver et pænt formet hop. Størrelserne er tilpasset, så hoppet foregår inden for skærmen.

Hastigheden kan sættes op og ned ved at ændre frameRate.

float posX = 10;
float hastX = 2;
float posY = 390;
float hastY = -9;
float accelY = 0.125;

void setup() {
  size(400, 400);
  frameRate(10);
  textSize(20);
}

void draw() {
  background(0);
  fill(255);
  text("Y-hastighed = " + hastY, 20, 30);
  ellipse(posX, posY, 20, 20);
  posX += hastX;
  if (posX < 10 || posX > width - 10) {
    hastX *= -1;
  }
  if (posY > height - 10) {
    hastY *= -1;
  } else {
    hastY += accelY;
  }
  posY += hastY;
}

Referencer