处理:按钮按下开关状态

时间:2012-02-29 22:36:48

标签: button state processing

所以我有一个画一个圆圈的ON-OFF按钮。我遇到的麻烦是ON OFF状态是随机的,这取决于我按下按钮多长时间。我想这是由于draw()函数,它还以帧速率及时循环我的按钮功能。我想要的是按下按钮一次打开按钮再次按下时关闭按钮,无论按下按钮多长时间。这是代码。

else if (circle4.pressed()) {
  println("button 4 is pressed");

  if(drawCirclesPrimary){
  drawCirclesPrimary = false;
  }
  else{
  drawCirclesPrimary = true;
  }
  println("drawCirclesPrimary"+drawCirclesPrimary);
}

2 个答案:

答案 0 :(得分:1)

我建议在processing.org上查看Buttons tutorial。以下代码是教程中包含的内容的子集(但是,您需要查看教程中的所有代码)。评论是我的。

void setup() { 
  // Create instances of your button(s)
}

void draw() { 
  // Draw buttons, update cursor position, check if buttons have been clicked.
}

// Provides the overRect() method (among others).
class Button
{
    // If the cursor is placed within the footprint of the button, return true.
    boolean overRect(int x, int y, int width, int height) 
    {
      if (mouseX >= x && mouseX <= x+width && mouseY >= y && mouseY <= y+height) {
        return true;
      } 
      else {
        return false;
      }
    }
}


class RectButton extends Button
{  
   // Create a rectangle button with these size/color attributes.
   RectButton(int ix, int iy, int isize, color icolor, color ihighlight) 
   {
      x = ix;
      y = iy;
      size = isize;
      basecolor = icolor;
      highlightcolor = ihighlight;
      currentcolor = basecolor;
   }

   // Determines whether the cursor is over the button.
   boolean over() 
   {
      if( overRect(x, y, size, size) ) {
        over = true;
        return true;
      } 
      else {
        over = false;
        return false;
      }
   }

   // Draws the rectangle button into your sketch.
   void display() 
   {
      stroke(255);
      fill(currentcolor);
      rect(x, y, size, size);
   }
}

答案 1 :(得分:0)

This thread有一些示例代码,用于仅在按下某个键时绘制对象。这与你想要的非常相似。

您可以使用keyPressed而不是keyReleasedmouseClicked。在按下鼠标按钮然后释放后调用一次。使用布尔变量来存储开/关状态。在mouseClicked内,切换该布尔变量的值。