我似乎无法正确使用以下代码。
这是我在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.
}
答案 0 :(得分:1)
这是一些应该做你想做的代码示例。有几点需要注意:
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
}
}