处理中的简单布尔开/关按钮

时间:2014-10-11 20:21:11

标签: button boolean processing

我试图写一个按钮类,一个可以使用布尔函数在开启和关闭状态之间切换的按钮类。

切换应该在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;
        }
      }
    }
  }
}

1 个答案:

答案 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()在发现此类事件时由处理调用。