обработка: состояние переключателя нажатия кнопки

Итак, у меня есть кнопка ВКЛ-ВЫКЛ, которая рисует круг. Проблема, с которой я сталкиваюсь, заключается в том, что состояния ON OFF случайны в зависимости от того, как долго я нажимаю кнопку. Я предполагаю, что это связано с функцией draw(), которая также зацикливает функцию моей кнопки во времени с частотой кадров. Я хочу, чтобы кнопка включалась при однократном нажатии и выключалась при повторном нажатии, независимо от того, как долго кнопка нажата. Вот код.

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

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

person allgored    schedule 29.02.2012    source источник


Ответы (2)


Я бы посоветовал ознакомиться с руководством по кнопкам на сайте processing.org. Следующий код является подмножеством того, что содержится в руководстве (однако вам потребуется просмотреть весь код в руководстве). Комментарии мои.

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);
   }
}
person gary    schedule 02.03.2012

В этой ветке есть пример кода для рисования объекта только тогда, когда ключ нажал. Это очень похоже на то, что вы хотите.

Вместо keyPressed и keyReleased можно использовать mouseClicked. который вызывается один раз после нажатия и отпускания кнопки мыши. Используйте логическую переменную для хранения состояния включения/выключения. Внутри mouseClicked переключите значение этой логической переменной.

person jlstrecker    schedule 01.03.2012