Objekt Hastighed

Fra HTX Arduino
Spring til navigation Spring til søgning

De to eksempler her på siden er de samme som bruges til Objekt Placering, så beskrivelsen her fokuserer på hvordan objekterne flyttes.

De viste eksempler arbejder begge med en konstant hastighed, der er baseret på Processings frameRate

Eksempel baseret på framerate

Programmets visning af objektplacering

Flytningen af objektet sker ved at man lægger en Step-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å denne step-værdi, men det ville kunne give en ændring i den hastighed objektet bevæger sig med. Et eksempel på dette kan ses i hop-eksemplet, hvor der hele tiden ændres på y-hastigheden, mens x-hastigheden holdes konstant.

Hvis det bare var den generelle hastighed man ville ændre på, så kan man også ændre frameRate.

int posX = 10;
int posY = 10;
int stepX = 3;
int stepY = 5;

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

void draw() {
  background(0);
  fill(255);
  text("X : " + posX, 320, 30);
  text("Y : " + posY, 320, 60);
  ellipse(posX, posY, 20, 20);
  posX += stepX;
  if (posX < 10 || posX > width - 10) {
    stepX *= -1;
  }
  posY += stepY;
  if (posY < 10 || posY > height - 10) {
    stepY *= -1;
  }
}

Eksempel ud fra en data-model

Programmets visning af objektplacering

I dette eksempel arbejdes med en datamodel, som er et 2-dimensionelt Array.

Bevægelsen sker igen ved at rykke på brikken for hver frame.

Datamodellen binder objektet, så man ikke kan ændre på hvor langt brikken rykkes i hver frame, det vil kun give mening at rykke en ad gangen.

Hvis man ønsker at ændre hastigheden, så er muligheden her at ændre frameRate

int xWidth = 10;
int yHeight = 20;
int xSize = 15;
int ySize = 15;
int xPos = int(random(xWidth));
int yPos = 0;
int [][] bane = new int [xWidth][yHeight];
void setup() {
  for (int n = 0; n < xWidth; n++) {
    for (int i = 0; i < yHeight; i++) {
      bane[n][i] = 0;
    }
  }
  size(220, 420);
  strokeWeight(2);
  frameRate(10);
  textSize(20);
}

void draw() {
  background(255);
  for (int n = 0; n < xWidth; n++) {
    for (int i = 0; i < yHeight; i++) {
      if (bane[n][i] == 1) {
        fill(180);
        rect(n*(xSize + 5) + 10, i*(ySize + 5) + 10, xSize, ySize);
      }
    }
  }
  fill(180);
  rect(xPos*(xSize + 5) + 10, yPos*(ySize + 5) + 10, xSize, ySize);
  fill(0);
  text("X : " + xPos, 160, 30);
  text("Y : " + yPos, 160, 60);
  yPos++;
  if (yPos == yHeight - 1) {
    bane[xPos][yPos] = 1;
    newObject();
  } else if (bane[xPos][yPos+1] == 1) {  
    bane[xPos][yPos] = 1;
    newObject();
  }
}

void newObject() {
  yPos = 0;
  xPos = int(random(xWidth));
  if (bane[xPos][yPos+1] == 1) {
    exit();
  }
}

Referencer

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