Key Press Multi

Her er et eksempel der viser hvordan man kan håndtere input fra flere taster på en gang.

let cx;
let cy;

let state = {
  north: false,
  south: false,
  west: false,
  east: false,
  boost: false
};

function setup() {
  createCanvas(windowWidth, windowHeight);
  cx = width / 2;
  cy = height / 2;
}

function draw() {
  background(220);
  fill(0);
  noStroke();
  textSize(20);
  text(`Move using arrow keys and space`, 10, 30);

  // show
  if (state.boost) {
    fill("orange");
    stroke("red");
  } else {
    fill("gray");
    stroke(0);
  }

  strokeWeight(5);
  circle(cx, cy, 50);

  // update position
  const step = state.boost ? 5 : 1;
  if (state.west) {
    cx -= step;
  }
  if (state.east) {
    cx += step;
  }
  if (state.north) {
    cy -= step;
  }
  if (state.south) {
    cy += step;
  }
}

function keyPressed() {
  console.log("Pressed:", key, keyCode)
  if (key === " ") {
    state.boost = true;
  }
  if (keyCode === LEFT_ARROW) {
    state.west = true;
  }
  if (keyCode === RIGHT_ARROW) {
    state.east = true;
  }
  if (keyCode === UP_ARROW) {
    state.north = true;
  }
  if (keyCode === DOWN_ARROW) {
    state.south = true;
  }
  return true
}

function keyReleased() {
  console.log("Released:", key, keyCode)
  if (key === " ") {
    state.boost = false;
  }
  if (keyCode === LEFT_ARROW) {
    state.west = false;
  }
  if (keyCode === RIGHT_ARROW) {
    state.east = false;
  }
  if (keyCode === UP_ARROW) {
    state.north = false;
  }
  if (keyCode === DOWN_ARROW) {
    state.south = false;
  }
  return true
}

Bemærk at både keyPressed() og keyReleased() hændelser håndteres for alle gyldige input.

Status for de enkelte input registreres i variablen state, som er et objekt med de nødvendige attributter.

I eksemplet er håndteringen af venstre piletast fremhævet.

Denne måde at håndtere input bevirker at figuren kan bevæges diagonalt, ved at trykke på to taster samtidigt. Desuden er bevægelsen uafhængig af repeat rate i keyboard indstillingerne.

Demo

Prøv det kørende eksempel

Materiale