Кнопка включения / выключения для обработки - PullRequest
0 голосов
/ 20 июня 2011

Я не могу правильно понять следующий код.

Это базовая программа, которую я использую с Processing. Я изменил цвет квадрата, когда щелкнул по нему, но не могу заставить его снова измениться при повторном щелчке.

Это в основном кнопка переключения, когда я нажимаю на квадрат, а НЕ когда я отпускаю кнопку мыши. Я пытаюсь интегрировать его с Arduino, поэтому есть порт записи.

boolean A = 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 ((A) && (mousePressed) && ((mouseX > x) && (mouseX < x + w) &&
        (mouseY > y) && (mouseY < y + h))) { // If mouse is pressed,

        fill(40, 80, 90);
        A = !A;// change color and
        port.write("H"); // Send an H to indicate mouse is over square.
    }
    rect(50, 50, 100, 100); // Draw a square.
}

1 Ответ

1 голос
/ 20 июня 2011

Вот пример кода, который должен делать то, что вы хотите. Несколько вещей на заметку:

Функция 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
    }
}
...