Processing:Примеры/Применение функций для работы с клавиатурой

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Описание[1]

Кликните на дисплейном окне Processing и начните нажимать на клавиши с буквами – это начнет «печатать» на экране разноцветные квадраты. Функция keyPressed() вызывается при нажатии на клавишу. Еще одна функция для работы с клавиатурой – это keyReleased(); она вызывается, когда пользователь отпускает клавишу.

Пример

int maxHeight = 40;
int minHeight = 20;
int letterHeight = maxHeight;  // высота «букв»
int letterWidth = 20;          // ширина «букв»

int x = -letterWidth;          // позиция X для «букв»
int y = 0;                     // позиция Y для «букв»

boolean newletter;              

int numChars = 26;      // в алфавите 26 символов
color[] colors = new color[numChars];

void setup() {
  size(640, 360);
  noStroke();
  colorMode(HSB, numChars);
  background(numChars/2);
  // задаем цветовой тон для каждой клавиши:
  for(int i = 0; i < numChars; i++) {
    colors[i] = color(i, numChars, numChars);    
  }
}

void draw() {
  if(newletter == true) {
    // рисуем «букву»:
    int y_pos;
    if (letterHeight == maxHeight) {
      y_pos = y;
      rect( x, y_pos, letterWidth, letterHeight );
    } else {
      y_pos = y + minHeight;
      rect( x, y_pos, letterWidth, letterHeight );
      fill(numChars/2);
      rect( x, y_pos-minHeight, letterWidth, letterHeight );
    }
    newletter = false;
  }
}

void keyPressed()
{
  // если клавиша между «А» (65) и «Z», а также между «а» и «z» (122):
  if((key >= 'A' && key <= 'Z') || (key >= 'a' && key <= 'z')) {
    int keyIndex;
    if(key <= 'Z') {
      keyIndex = key-'A';
      letterHeight = maxHeight;
      fill(colors[keyIndex]);
    } else {
      keyIndex = key-'a';
      letterHeight = minHeight;
      fill(colors[keyIndex]);
    }
  } else {
    fill(0);
    letterHeight = 10;
  }

  newletter = true;

  // обновляем позицию «буквы»:
  x = ( x + letterWidth ); 

  // делаем перенос в начало новой строки
  // (когда строка закончится, печать начнется на новой строке):
  if (x > width - letterWidth) {
    x = 0;
    y+= maxHeight;
  }

  // делаем перенос в начало экрана
  // (когда экран закончится, печать вернется в начало экрана,
  //  то есть в его левую верхнюю часть):
  if( y > height - letterHeight) {
    y = 0;      // reset y to 0
  }
}

См.также

Внешние ссылки