Spil Opdatering

Fra HTX Arduino
Spring til navigation Spring til søgning

Eksemplerne her diskuterer millis()[1] og frameRate()[2], med både fordele og ulemper.

Løsning med frameRate

I nogle spil med en langsom flytning af objekter, set i forhold til frameRaten, der er det uhensigtsmæssigt at sætte frameRaten så langt ned som som flytnings-takten kræver, da det vil give langsommere reaktion på keyboard og museklik.

Det kan her være en fordel at holde fast i en frameRate på 60, og så tælle sig frem med timeCount til hvornår objektet skal flyttes. Her er det variablen timeStep der bestemmer hvor mange frames der skal gå før før objektet flyttes. Her bliver det 3 gange i sekundet ud fra frameRate på 60 delt med timeStep på 20.

Hvis man ønsker at objektet skal flyttes hurtigere, så kan variablen timeStep sættes ned.

int posY = 0;
int stepY = 20;
int timeCount = 0;
int timeStep = 20;

void setup() {
  size(200, 400);
  frameRate(60);
}

void draw() {
  background(255);
  fill(180);
  rect(90, posY, 20, 20);
  if (timeCount == timeStep) {
    timeCount = 0;
    posY += stepY;
    if (posY > height - 20) {
      posY = 0;
    }
  }
  timeCount++;
}

Løsning med millis()

Hvis man ønsker at opdateringen skal være uafhængig af om skærmen får opdateret, så kan man anvende millis() til ar styre timingen.

Funktionen millis() returnerer antal millisekunder siden programmets start, og der bruges en variabel lastTime til at angive tiden for den sidste opdatering i millisekunder. Når millis() - lastTime bliver større end interval (333 ms for 3 opdateringer i sekundet), så flyttes brikken, og der lægges interval til lastTime, så der går 333 millisekunder til næste opdatering.

Igen kan man så rette på opdateringshastigheden ved at ændre interval.

int posY = 0;
int stepY = 20;
int interval = 333;
int lastTime = 0;

void setup() {
  size(200, 400);
  frameRate(60);
}

void draw() {
  background(255);
  fill(180);
  rect(90, posY, 20, 20);
  if ((millis() - lastTime) > interval) {
    lastTime += interval;
    posY += stepY;
    if (posY > height - 20) {
      posY = 0;
    }
  }
}

Referencer

  1. millis() på Processing.org
  2. frameRate() på Processing.org
Spiludvikling - Processing
Bruger-input mousePressed() - mouseReleased() - mouseClicked() - mouseMoved() - mouseDragged() - mouseX og mouseY - mouseButton - mousePressed - keyPressed() - keyReleased() - keyTyped() - key - keyCode - keyPressed - Flere taster
Data-model Objekt Placering - Objekt Hastighed - Spilleplade - Flere Objekter - Array i Spil - 2-dimensionelt Array - Spil Hop - Highscore - Start-skærm
Visning Rektangel - Cirkel - Spilleplade - Grafikobjekter - Farver i Spil - Kollision
Spil-tid frameRate - Objekter i Bevægelse - Spilletid - Spil Opdatering - Udvikling i Tid
Objekter Objekter i Bevægelse