Освой Processing играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Работаем с клавиатурой

В Processing очень легко взаимодействовать с клавиатурой. Вы без труда можете определить нажатия клавиши и написать код для этого события.

Напишем небольшой скетч.


int x;
int y;
int radius;
color circleColor;
boolean isDrawStroke;

void setup()
{
    size(480, 320);
    strokeWeight( 2 );
    x = width/2;
    y = height/2;
    radius = 80;
    circleColor = color(255, 0, 0);
    isDrawStroke = true;
} 

void draw()
{
background(255);
    if (isDrawStroke == true) {
        stroke(0);
    } else {
        noStroke();
    } 
	fill(circleColor);
    ellipse(x, y, radius * 2, radius * 2);
} 

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, radius, width - radius);
    y = constrain( y, radius, height - radius );
} 

void keyReleased()
{
    switch (key) {
        case 'r':
            circleColor = color(255, 0, 0);
            break;
        case 'g':
            circleColor = color(0, 255, 0);
            break;
        case 'b':
            circleColor = color(0, 0, 255);
            break;
        case 'c':
            circleColor = color(0, 255, 255);
            break;
        case 'm':
            circleColor = color(255, 0, 255);
            break;
        case 'y':
            circleColor = color(255, 255, 0);
            break;
        default:
            break;
    }
} 

void keyTyped()
{
    if ( key == 's' ) {
        isDrawStroke = !isDrawStroke;
    }
}

Разберём код.

Вначале мы объявили несколько переменных для координат, радиуса и цвета круга. А также назначили булеву переменную для обводки.

В методе setup() задаём первоначальные настройки для круга.

В методе draw() рисуем круг.

Далее идут методы, связанные с клавиатурой: keyPressed(), keyReleased() и keyTyped().

Функция keyPressed() выполняется, когда вы нажимаете на клавишу. В нашем примере мы отслеживаем нажатия клавиш-стрелок и сдвигаем круг в нужном направлении. Чтобы круг не ушёл за пределы окна, мы задаём ограничение при помощи функции constrain().

Функция keyReleased() выполняется, когда вы отпускаете клавишу. В примере мы отслеживаем только некоторые клавиши, чьи символы совпадают с первой буквой цвета: R - red (красный), G - green (зелёный) и т.д.

Функция keyTyped() работает так же, как keyPressed(), но игнорирует специальные клавиши типа стрелок, Enter, Ctrl и Alt. В нашем примере отслеживается клавиша S - при её нажатии у круга появляется или исчезает обводка.

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

Одновременное нажатие клавиш, типа Ctrl+A, здесь не рассматривается.

На главную страницу Processing

Реклама