Info Draft Processing suomeksi

Näppäimistö

Näppäimistön tapahtumat


Näppäimistön tapahtumat kaappaamalla ohjelma voi vastata käyttäjän toimenpiteisiin. Näytämme tässä kappaleessa kuinka haemme tiedon, joka liittyy näppäimistöön, ja me luomme yksinkertaisen kirjoituskoneen, jolla voimme kirjoitella tekstiä ruudulle. 

Viimeksi painetun näppäimen arvo tallennetaan muuttujaan, joka julistetaan Processingissa. Tämä muuttuja voi tallentaa vain yhden kirjaimen, jota symbolisoi esimerkiksi 'a', 'b', 'c'... Tässä tapauksessa suuri kirjain on eri kirjain kuin pieni kirjain.

Seuraavassa esimerkissä näytämme ikkunassa merkin, joka vastaa painettua näppäintä. Tähän käytämme metodia text().


 

 void draw() {
  background(204);
  fill(0);
  textSize(70);
  text(key,30,70);
}

Voimme kaapata ohjelmaamme, kun käyttäjä on painanut tai vapauttanut näppäimen näppäimistöllä, metodeilla keyPressed() ja keyReleased(). Nämä kaksi metodia Processing kutsuu automaattisesti, kun näppäimistön tila muuttuu.

Seuraavassa esimerkissä keyPressed() ja KeyReleased() muuttavat muuttujan y arvoa, jolla kirjain sijoitetaan ruudulle.

Listen
Read phonetically


 

int y = 0;

void setup() {
  size(130,200);
  textSize(80);
  stroke(0);
  fill(0);
}

void draw() {
  background(204);
  line(10,100,120,100);
  text(key,35,y);
}

void keyPressed(){
  y = 180;
}

void keyReleased(){
  y = 80;
}

Näppäinkomennot

Erikoisnäppäimet kuten nuolet (YLÖS, ALAS, VASEMMALLE, OIKEALLE) tai ALT, CONTROL, SHIFT tallennetaan muuttujaan keyCode. Testi if (key==CODED) kertoo onko painettu näppäin erikoisnäppäin vai eikö. Ohjelmassa meidän täytyy erottaa suuret ja pienet kirjaimet riippuen näppäimestä, jota tahdot testata.

Seuraavassa esimerkissä luomme erityisen kirjoituskoneen, jossa on mahdollista liikuttaa tekstiä nuolilla.

Aina kun näppäintä on painettu, se tallennetaan merkkijonoon, joka näytetään draw() -komennolla käyttäen metodia text().


 01_MachineAEcrire_02

String s = "";
int x = 50;
int y = 50;

void setup() {
  size(200,200);
}

void draw() {
  background(255);
  fill(0);
  text(s, x, y);
}

void keyPressed() {
  if (key == CODED){
    if (keyCode == LEFT)   x  = x - 1;
    if (keyCode == RIGHT)  x = x + 1;
    if (keyCode == UP)     y = y - 1;
    if (keyCode == DOWN)   y = y + 1;
  }
  else {
    s = s + key;
  }
}

Huomaa aaltosulkujen käyttö jokaisen if-komennon jälkeen. Aaltosulut voidaan jättää pois, jos syntaksi toimii vain yhden komennon kohdalla. Käytämme myös String-tyyppistä muuttujaa, joka tallentaa sarjan merkkejä, ja joka on erittäin hyvä esimerkiksi lauseiden tallentamiseen. 

Processing määrittelee myös muuttujan keyPressed.

Varoitus! Vaikka syntaksi on identtinen, sitä ei pidä sekoittaa metodiin keyPressed(), jolla on sama nimi. Tämä muuttuja kertoo meille aina, jos näppäintä painetaan, tai jos sitä ei voida käyttää metodissa draw().

Seuraavassa esimerkissä piirrämme ympyrän, jos painettu näppäin on 'c', neliön jos painettu näppäin on ´r´.

Cercle_Carre

void draw()
{
  rectMode(CENTER);
  background(128);
  if (keyPressed == true)
  {
    if (key == 'c') {
      ellipse(50,50,90,90);
    }
    else if (key == 'r') {
      rect(50,50,90,90);
    }
  }
}