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

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

Шкодим

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

Работаем с мышью

Поближе познакомимся с функциями для мыши. Для начала напишем скетч.


void setup()
{
    size(500, 400);
    background(255);
} 

void draw()
{
    // empty
} 

void mousePressed()
{
    if (mouseButton == RIGHT) {
        background(255);
    }
} 

void mouseMoved()
{
    stroke(0, 64);
    strokeWeight(1);
    fill(255, 32);
    float distance = dist( mouseX, mouseY, pmouseX, pmouseY );
    constrain(distance, 8, 100);
    ellipse( mouseX, mouseY, distance, distance );
} 

void mouseDragged()
{
    stroke(0);
    float distance = dist( mouseX, mouseY, pmouseX, pmouseY );
    constrain(distance, 0, 100);
    float weight = map(distance, 0, 100, 1, 10);
    strokeWeight(weight);
    line( mouseX, mouseY, pmouseX, pmouseY );
} 

void mouseReleased()
{
    noStroke();
    fill(255, 16);
    rect(0, 0, width, height);
} 

void mouseClicked()
{
    fill(255, 0, 0, 128);
    float size = random(20, 200);
    ellipse(mouseX, mouseY, size, size);
}

Функцию draw() мы оставили пустой, а все операции проводим в функциях мыши. Но сама функция нужна, иначе программа перестанет быть интерактивной.

Запустите пример. Теперь вы можете рисовать мышью. Мышь оставляет след в виде кругов. Когда вы нажимаете кнопку и отпускаете её, появляется красный круг. Когда вы двигаете мышью, удерживая левую кнопку мыши, появляется чёрная линия. По нажатию правой кнопки мыши картинка стирается и вы можете начать сначала.

Пролетая над гнездом кукушки

Нарисуем в центре окна круг. Если мышь находится за пределами круга, то круг красный. Когда мышь попадает в область круга, то круг становится зелёным. Если при этом нажать на левую кнопку мыши, то круг станет синим.


int radius = 75; //задаём радиус круга
int x = 300;
int y = 200;

void setup() {
  size(600, 400);
  smooth();   // сглаживание
  noStroke(); // выключаем обводку
}

void draw() {
  background(200);  // фон окна - серый
  ellipse(x, y, radius * 2, radius * 2);        //рисуем круг в центре окна
  float distance = dist(mouseX, mouseY, x, y);  //отслеживаем положение курсора
  if (distance > radius) { 
    // если мышь за пределами круга, то круг красный
    fill(225, 0, 0, 255);
  } else if (mousePressed) {//левая кнопка мышки нажата
    if (mouseButton == LEFT) {
      fill(0, 0, 255, 255);  // закрашиваем круг синим цветом
    }
  } else {
    // если курсор внутри круга, то закрашиваем его в зелёный цвет. кнопка не нажата
    fill(0, 225, 0, 255);
  }
}

Существует пять функций и шесть встроенных переменных для работы с мышью:

  • Функция mouseClicked() активируется, когда вы кликаете мышью. Это означает нажатие и отпускание кнопки мыши. У нас эта функция применяется для рисования прозрачного красного круга.
  • Функция mouseDragged() активируется, когда вы нажимаете кнопку мыши и двигаете мышью, пока кнопка нажата. С помощью этой функции мы рисуем линии.
  • Функция mouseMoved() вызывается каждый раз, когда мышь передвигается, а кнопки не нажаты. В нашем скетче она рисует белые прозрачные круги с чёрной прозрачной границей.
  • Функция mousePressed() вызывается, когда вы нажимаете кнопку мыши. Мы использовали эту функцию вместе со встроенной переменной mouseButton для очистки экрана правой кнопкой мыши.
  • Функция mouseReleased() вызывается, когда вы отпускаете кнопку мыши. С помощью этой функции мы рисуем белый прозрачный прямоугольник размером с окна скетча поверх всех изображений.
  • Встроенная переменная mouseX содержит текущую координату x мыши в окне скетча. Она обновляется с каждым кадром.
  • Встроенная переменная mouseY содержит текущую координату y мыши в окне скетча. Она обновляется с каждым кадром.
  • Встроенная переменная pmouseX содержит координату x мыши предыдущего кадра. Она обновляется с каждым кадром.
  • Встроенная переменная pmouseY содержит координату y мыши предыдущего кадра. Она обновляется с каждым кадром.
  • Встроенная переменная mousePressed - это логическая переменная, проверяющая, нажата кнопка или нет. Значение переменной истинно, когда кнопка мыши нажата и ложно, когда она отжата.
  • Встроенная переменная mouseButton - это переменная, содержащая информацию о том, какая кнопка мыши нажата. Она принимает значения встроенных констант LEFT, RIGHT и CENTER.

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

Реклама