Вот пример кода, который должен делать то, что вы хотите. Несколько вещей на заметку:
Функция draw()
должна использоваться только для фактического рисования вашего эскиза, другой код должен находиться в другом месте. Он вызывается в непрерывном цикле для перерисовки экрана, поэтому любой дополнительный код может замедлить или даже предотвратить перерисовку, что нежелательно.
Вы были на правильном пути с переменной A
. Я переименовал его в squareVisible
. Это логическая переменная, которая указывает, следует ли рисовать квадрат или нет. Функция draw()
проверяет его состояние и изменяет заливку так, чтобы рисовать квадрат только в том случае, если squareVisible
истинно.
Функция mousePressed()
вызывается процессингом, когда вы щелкаете где-то на эскизе. Это переключение переменной squareVisible.
Функция mouseMoved()
вызывается процессингом, когда вы перемещаете мышь без щелчка мышью, поэтому лучше отправлять последовательный вывод, чем функция draw ().
boolean squareVisible = true;
int x = 50;
int y = 50;
int w = 100;
int h = 100;
import processing.serial.*;
Serial port;
int val;
void setup() {
size(200, 200);
noStroke();
fill(255, 0, 0);
rect(x, y, w, h);
port = new Serial(this, 9600);
}
void draw() {
background(255);
if (squareVisible) {
fill(40, 80, 90);
} else {
fill(255, 0, 0);
}
rect(x, y, w, h); // Draw a square
}
void mousePressed() {
if (((mouseX > x) && (mouseX < x + w) &&
(mouseY > y) && (mouseY < y + h))) {
// if mouse clicked inside square
squareVisible = !squareVisible; // toggle square visibility
}
}
void mouseMoved() {
if (((mouseX > x) && (mouseX < x + w) &&
(mouseY > y) && (mouseY < y + h))) {
port.write("H"); // send an H to indicate mouse is over square
}
}