我试图写一个按钮类,一个可以使用布尔函数在开启和关闭状态之间切换的按钮类。
切换应该在if(mousePressed)之后发生。我可以通过一种方式让它工作,但是在尝试让它切换回以前的状态时我迷失了。
当我将if(mousePressed)中的一个更改为if(keyPressed)时,一切正常。
感谢您的好时光。
bclass button;
int offset = 20;
void setup() {
rectMode(CORNERS);
noStroke();
size(300, 100);
button = new bclass(offset, offset, width-offset, height-offset);
}
void draw() {
button.display();
button.state(mouseX, mouseY);
}
class bclass {
float x;
float y;
float w;
float h;
boolean state = false;
bclass(float x_, float y_, float w_, float h_) {
x = x_;
y = y_;
w = w_;
h = h_;
}
void display() {
if (state) {
fill(255, 0, 0);
} else {
fill(0);
}
rect(x, y, w, h);
}
void state(int mx, int my) {
if (!state) {
if (mousePressed) {
if (mx > x && mx < x + w) {
state = true;
}
}
}
if (state) {
if (mousePressed) {
if (mx > x && mx < x + w) {
state = false;
}
}
}
}
}
答案 0 :(得分:0)
将州的方法更改为:
void state(int mx, int my) {
if (mousePressed) {
if (mx > x && mx < x + w) {
state = !state; // change state to opposite value
delay(100); // delay 100ms (mousePressed lasts some millis)
}
}
}
但更好的解决方案是使用Processing的mouseClicked()
事件:
public void draw() {
button.display();
}
public void mouseClicked() {
button.state(mouseX, mouseY);
}
class bclass {
...
void state(int mx, int my) {
if (mx > x && mx < x + w) {
state = !state;
}
}
}
在此解决方案中button.state()
仅从mouseClicked()
调用,而mouseClicked()
在发现此类事件时由处理调用。