простой переключатель с пробелом в обработке - PullRequest
1 голос
/ 10 марта 2020

Я пытаюсь сделать так, чтобы при нажатии на пробел коробка становилась черной. затем, когда я нажимаю его снова, он снова становится белым. и так далее. В данный момент окно просто мигает, когда я нажимаю клавишу пробела, и не останавливается. Вот мой код:

boolean x = false;


void setup() {
  size(500, 500);
  surface.setResizable(true);
  rect(50, 50, 400, 400);
}

void draw() {
  background(#FFFFFF);

  if (key == ' ') {
    if(x == false){
      x = true;
    }else {
      x = false;
    }
  }

  if(x == false){
    fill(#FFFFFF);
    rect(50, 50, 400, 400);
  }else{
    fill(#000000);
    rect(50, 50, 400, 400);
  }

}

1 Ответ

1 голос
/ 10 марта 2020

Для обработки события в обработке вам необходимо использовать обратные вызовы обработчика событий. (например, https://processing.org/reference/keyPressed_.html) Ваш код запускает блок if (key == ' ') каждый раз, когда вызывается функция draw(). В отличие от этого, метод keyPressed запускается только один раз при каждом нажатии клавиши. Тем не менее, он все еще нуждается в блоке if, чтобы узнать, какой это был ключ.

В этом случае:

void keyPressed() {
  if (key == ' ') {
    x = !x;
  }
}

x = !x; переключает x без оператора if. Удалите свой блок if (key == ' ') из draw.

...