Главная » Processing » Работаем с клавиатурой в Processing

0

Еще один способ взаимодействия человека и компьютера – клавиатура. Клавиатура, наряду с мышью, является наиболее известным устройством для взаимодействия с компьютером. С Processing вы можете без труда определить, когда пользователь нажимает клавишу или отпускает ее. Для выполнения фрагментов кода назначаются определенные клавиши. Это самый простой способ создать интерфейс с пользователем в Processing. Например, клавиша D может быть запрограммирована для переключения режимов отлидки в вашем приложении, а клавиша S – для сохранения нарисованной композиции в графическом формате.

Как это делается

Начнем с объявления переменных и функций setup() и draw(). В этом примере мы напишем несложный скетч Processing, меняющий значение переменных при нажатии на определенные клавиши на клавиатуре.

int x; int y; int r; color c;

boolean drawStroke; void setup()

{

size( 480, 320 );

smooth(); strokeWeight( 2 );

x = width/2; y = height/2; r = 80;

c = color( 255, 0, 0 ); drawStroke = true;

}

void draw()

{

background( 255 );

if ( drawStroke == true ) { stroke( 0 );

} else { noStroke();

}

fill( c );

ellipse( x, y, r*2, r*2 );

}

Следующий фрагмент кода будет заниматься событиями клавиатуры. Мы используем три функции: keyPressed(), keyReleased() и keyTyped().

void keyPressed()

{

if ( key == CODED ) {

if ( keyCode == RIGHT ) { x += 10;

} else if ( keyCode == LEFT ) { x -= 10;

} else if ( keyCode == UP ) { y -= 10;

} else if ( keyCode == DOWN ) { y += 10;

}

}

x = constrain( x, r, width-r ); y = constrain( y, r, height-r );

}

void keyReleased()

{

switch ( key ) { case ‘r':

c = color( 255, 0, 0 ); break;

case ‘g':

c = color( 0, 255, 0 ); break;

case ‘b':

c = color( 0, 0, 255 ); break;

case ‘c':

c = color( 0, 255, 255 ); break;

case ‘m':

c = color( 255, 0, 255 ); break;

case ‘y':

c = color( 255, 255, 0 ); break;

default: break;

}

}

void keyTyped()

{

if ( key == ‘s’ ) { drawStroke = !drawStroke;

}

}

Результат приложения выглядит так, как на скриншоте:

Для перемещения круга используются стрелки. Клавиша S меняет толщину штриха. Клавиши R, G, B, C, M и Y меняют цвет круга.

Как это работает

В Processing существует три функции, реагирующие на события клавиатуры: keyPressed(), keyReleased() и keyTyped(). Эти функции работают немного пазному. Функция keyPressed() выполняется, когда вы нажимаете на клавишу. Она понадобится вам, когда вы захотите сделать прямое взаимодействие с компьютером. Функция keyReleased() выполняется, когда вы отпускаете клавишу. Это полезно, когда вы нажимаете на клавишу, а изменение в приложении срабатывает при ее отпускании. Функция keyTyped() работает так же, как keyPressed(), но игнорирует специальные клавиши типа стрелок, Enter, Ctrl и Alt.

f  Встроенная переменная key содержит значение последней нажатой клавиши.

f Встроенная переменная keyCode используется для хранения последней нажатой специальной клавиши вроде Shift, Ctrl или стрелки. Скорее всего, вы используете ее в блоке if, проверяющем, является ли клавиша дополнительной, так, как в функции keyPressed() в этом примере. keyCode принимает значения UP, DOWN, LEFT, RIGHT, ALT, CONTROL, SHIFT, BACKSPACE, TAB, ENTER, RETURN, ESC и DELETE.

f  Встроенная переменная keyPressed является логической переменной.

Значение этой переменной истинно, если какая-либо клавиша нажата и ложно, когда ни одна из клавиш не нажата. Эту переменную удобно использовать в функции draw().

f   Функция keyPressed() выполняется один раз при нажатии клавиши.

f   Функция keyReleased() выполняется один раз при отпускании клавиши.

f   Функция keyTyped() выполняется, когда вы нажимаете клавишу для набора текста. Клавиши Alt, Ctrl или Shift в этой функции игнорируются.

Источник: Ян Вантомм, Processing 2: креативное программирование, перевод с английского Александры Мишутиной, Published by Packt Publishing Ltd., 2012, BIRMINGHAM – MUMBAI.

По теме:

  • Комментарии