Вторник, 23.04.2024, 11:51
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Тестування онлайн
тестування онлайн 


Социальные закладк

Положение курсора на экране

Оператор 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.  Границы круга 

Для проверки круга:

  1. мы применим функцию dist() для определения расстояния от центра круга до курсора
  2.  затем сравним это расстояние с радиусом круга
    • если расстояние меньше, мы будем знать, что курсор внутри круга.

В следующем примере, когда курсор попадает в круг, размер круга увеличивается:

 

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, и др.) истинны, они собраны в одно выражение с помощью логического И - символа &&. Если хотя бы одно выражение ложно, все выражение будет ложно, и прямоугольник не изменит цвет на черный.

  1. Создайте проект, в котором происходит построение линий за движением указателя мыши. При щелчке происходит очищение экрана.
  2. Создайте проект, в котором на холсте нарисованные глаза, зрачки которых движутся по указателю мыши.
Форма входа
Поиск
Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Рейтинг@Mail.ru
    Copyright MyCorp © 2024
    Конструктор сайтов - uCoz