Tema 13

Interacció amb el teclat

El teclat obre un ventall de possibilitats interactives: des de prémer tecles per canviar colors fins a controlar personatges o crear instruments musicals visuals. Domina keyPressed(), key i keyCode.

Per què utilitzar el teclat en art interactiu?

Mentre el ratolí controla la posició i els clics, el teclat permet ordres discretes: activar modes, disparar accions, introduir dades. En art generatiu i interactiu, el teclat serveix per:

  • Canviar entre eines de dibuix (llapis, pinzell, goma).
  • Modificar paràmetres en temps real (velocitat, nombre d'elements, opacitat).
  • Activar o desactivar efectes visuals (mostrar/amagar capes, iniciar/aturar animacions).
  • Crear jocs i narratives interactives (moviment de personatges, selecció d'opcions).
Idea clau: El teclat és com un tauler de control. Cada tecla pot ser un botó d'acció instantània.

key i keyCode

p5.js proporciona dues variables globals per saber quina tecla s'ha premut:

  • key — conté el caràcter de la tecla premuda (ex: 'a', 'B', '3', ' '). És un string.
  • keyCode — conté el codi numèric de la tecla, útil per a tecles especials com fletxes, ENTER, SHIFT, etc.
  • keyIsPressed — booleà que és true si qualsevol tecla està premuda en aquest moment.

Exemple bàsic: mostrar la tecla premuda al llenç.

let ultimaTecla = '';

function draw() {
  background(245);
  text('Prem una tecla: ' + ultimaTecla, width/2, 70);
}

function keyPressed() {
  ultimaTecla = key; // key conté el caràcter premut
}

keyPressed() vs keyIsPressed

Tenim dues maneres de respondre al teclat:

  • function keyPressed() { ... } — s'executa un sol cop quan es prem una tecla. Ideal per a accions discretes.
  • keyIsPressed dins de draw() — és true mentre es manté premuda una tecla. Ideal per a moviment continu.
function draw() {
  background(245);
  if (keyIsPressed) {
    if (keyCode === LEFT_ARROW) x -= 2;
    if (keyCode === RIGHT_ARROW) x += 2;
    if (keyCode === UP_ARROW) y -= 2;
    if (keyCode === DOWN_ARROW) y += 2;
  }
  ellipse(x, y, 30, 30);
}

Detectar tecles concretes

Podem preguntar per una tecla concreta comparant key amb un caràcter, o keyCode amb una constant.

function keyPressed() {
  if (key === 'r' || key === 'R') colorFons = color(255, 200, 200);
  if (key === 'g' || key === 'G') colorFons = color(200, 255, 200);
  if (key === 'b' || key === 'B') colorFons = color(200, 200, 255);
  if (key === ' ') colorFons = 0;
}

Combinacions de tecles: SHIFT, CONTROL, ALT

Podem detectar si una tecla modificadora està premuda alhora que una altra amb keyIsDown(keyCode).

function draw() {
  background(245);
  if (keyIsDown(SHIFT)) {
    mida = 60; // Shift premut: cercle gran
  } else {
    mida = 30; // sense Shift: cercle petit
  }
  ellipse(width/2, height/2, mida, mida);
}

Exemples creatius pas a pas

Pinzell amb tecles de color

Dibuixa amb el ratolí i canvia de color prement tecles numèriques (1-5).

let colors = [color(255,0,0), color(0,255,0), color(0,0,255), color(255,255,0), color(0)];

function keyPressed() {
  if (key >= '1' && key <= '5') {
    let index = int(key) - 1;
    colorActual = colors[index];
  }
}

Màquina d'escriure visual

Cada lletra premuda apareix al llenç en una posició aleatòria amb un color diferent.

let lletres = [];

function keyPressed() {
  if (key.length === 1 && key.match(/[a-zA-Z0-9]/)) {
    lletres.push({
      car: key,
      x: random(width),
      y: random(height),
      col: color(random(255), random(255), random(255))
    });
  }
}

Consells per a la interacció amb teclat

  • Diferencia majúscules i minúscules: key === 'a' no detecta 'A'. Utilitza key.toLowerCase() === 'a' per a ambdues.
  • Evita conflictes amb el navegador: tecles com F5 (refrescar) o Ctrl+S (desar) tenen funcions pròpies.
  • Utilitza keyCode per a fletxes i tecles especials: LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW, ENTER, ESCAPE, TAB, BACKSPACE, DELETE.
  • Combina ratolí i teclat: per exemple, mantenir SHIFT mentre es dibuixa per fer traços rectes.

Exercicis per practicar

  1. Fes que un personatge (cercle o rectangle) es mogui per la pantalla amb les fletxes (WASD o cursors).
  2. Crea un sistema de capes: prement '1', '2', '3' es mostren o s'amaguen diferents conjunts de formes al llenç.
  3. Implementa un comandament de velocitat: amb les tecles '+' i '-' augmenta o redueix la velocitat d'una animació.
  4. Dissenya un generador de formes aleatòries activat per la barra espaiadora: cada cop que es prem, apareixen 5 noves formes en posicions aleatòries.
  5. Repte: Crea un Paint controlat per teclat: les tecles numèriques seleccionen el color, les fletxes amunt/avall canvien la mida del pinzell, la tecla 'G' activa la goma, i la tecla 'C' neteja el llenç.

Reflexió artística

El teclat és un instrument de precisió. Amb ell, pots donar ordres exactes, navegar per menús conceptuals, o fins i tot escriure poesia visual lletra a lletra. En l'art interactiu, el teclat permet una connexió diferent a la del ratolí: és rítmic, seqüencial, gairebé musical. Pensa en les possibilitats narratives: un visitant que escriu el seu nom i el veu transformar-se en una constel·lació. Un joc on les decisions es premen amb tecles. Una performance on el codi s'escriu en directe i cada lletra genera un so o una imatge. Combina el teclat amb el ratolí per crear interfícies riques i accessibles. El teu sketch ja no és només una imatge: és una aplicació interactiva.

Mini-projecte del Tema 13

Crea un "Instrument de dibuix musical" amb les següents característiques:

  • Utilitza almenys 8 tecles diferents (ASDFGHJK o números 1-8) per seleccionar colors o formes.
  • Implementa moviment continu d'algun element amb les fletxes o WASD.
  • Incorpora combinacions de tecles: per exemple, mantenir SHIFT mentre es prem una tecla de color aplica aquell color al fons.
  • Utilitza keyPressed() per a accions discretes i keyIsPressed per a accions contínues.