| Положение курсора на экране
Оператор if может быть использован вместе в переменными mouseX и mouseY для задания положения курсора в окне.
Пример 1: Найди курсор
Программа в этом примере определяет, где находится курсор - справа или слева от линии, а затем двигает линию в направлении курсора:
float x;
int z = 10;
void setup() {
size(240, 120);
smooth();
x = width/2; //х = 120
}
void draw() {
background(204);
if (mouseX > x) {
x += 0.5;
z = -10;
}
if (mouseX < x) {
x -= 0.5;
z = 10;
}
line(x, 0, x, height); //вертикальная линия
// линии рисования стрелки
line(mouseX, mouseY, mouseX + z, mouseY - 10);
line(mouseX, mouseY, mouseX + z, mouseY + 10);
line(mouseX, mouseY, mouseX + z*3, mouseY);
}
|

|
 |
 |
Чтобы писать программы, имеющие графический интерфейс пользователя (кнопки, полосу прокрутки, флажки и т.д.), необходимо написать код, который знает, когда курсор находится в определенной области экрана.
Следующие два примера показывают, как проверить, находится курсор в пределах круга или прямоугольника, или нет. Код составлен из отдельных модулей с переменными, поэтому вы сможете использовать его для проверки любого круга или прямоугольника просто заменив несколько величин.
Пример 2. Границы круга 
Для проверки круга:
- мы применим функцию dist() для определения расстояния от центра круга до курсора
- затем сравним это расстояние с радиусом круга
- если расстояние меньше, мы будем знать, что курсор внутри круга.
В следующем примере, когда курсор попадает в круг, размер круга увеличивается:
int x = 120;
int y = 60;
int radius = 12;
void setup() {
size(240, 120);
smooth();
//ellipseMode() меняет интерпритацию параметров эллипса
// (х,у) - центр эллипса ,ширина и высота – радиусы
ellipseMode(RADIUS);
}
void draw() {
background(204);
float d = dist(mouseX, mouseY, x, y);
if (d < radius) {
radius++; // сокращение от radius = radius + 1
fill(0);
} else {
fill(255);
}
ellipse(x, y, radius, radius);
println("x = ",x," y = ",y," radius = ",radius , " d = ",d);
}
|
 |
 |
 |
Пример 3: Границы прямоугольника 
Для определения, находится курсор в прямоугольнике, или нет, мы применим другой подход. Мы реализуем четыре отдельных теста, проверяющих, по какую сторону от каждой линии прямоугольника находится курсор, а затем сравним результаты - если все окажутся истинными, программа будет знать, что курсор находится внутри прямоугольника. Это иллюстрирует рис. Все действия
просты, но, собранные в одну программу, могут показаться сложными:
int x = 80;
int y = 30;
int w = 80;
int h = 60;
void setup() {
size(240, 120);
}
void draw() {
background(204);
// && (оператор логическое И)
if ((mouseX > x) && (mouseX < x+w) &&
(mouseY > y) && (mouseY < y+h)) {
fill(0);
} else {
fill(255);
}
rect(x, y, w, h);
}
|


|
Выражение в операторе if несколько сложнее, чем те, что мы видели раньше. Чтобы убедиться в том, что все четыре выражения (mouseX > x, и др.) истинны, они собраны в одно выражение с помощью логического И - символа &&. Если хотя бы одно выражение ложно, все выражение будет ложно, и прямоугольник не изменит цвет на черный.
- Создайте проект, в котором происходит построение линий за движением указателя мыши. При щелчке происходит очищение экрана.
- Создайте проект, в котором на холсте нарисованные глаза, зрачки которых движутся по указателю мыши.
| |