处理类油漆程序中的颜色系统

Color System in Processing Paint-like Program

我正在构建一个类似绘画的程序在处理中。我希望能够调整笔颜色的 r、g 和 b 值。我所做的是使用 'r' 键来允许用户更改 r。点击 'r' 后,他们使用“+”和“-”键进行调整。然后你点击 'd',它就结束了。 '+' 和 '-' 已经用于笔号,所以我不得不这样做。但是当我 运行 代码并点击 r 它冻结并停止响应。有谁知道哪里出了问题。

这是代码中有问题的部分:

if(key == 'r'){ // Activates if 'r' is pressed
  actr = true; // Sets actr = to true
  while (actr = true) { // Goes until actr is false
    if (key == '=') { // Activates is '=' is pressed
      r = r ++; // Increases r by one
    }

    if (key == '-'){ // Activates if '-' is pressed
      r = r --; // Decreases r by one
    }

    if (key == 'd') { // Activates if 'd' is pressed
      actr = false; // Sets actr = to false
    }
  }
}

完整代码如下:http://www.openprocessing.org/sketch/226658

你遇到了一些问题。首先,看这一行:

while (actr = true) { // Goes until actr is false

您不是在此处检查相等性,而是将 true 的值分配给 actr 变量,该变量的计算结果也将是 true。换句话说,那永远不会是假的。相反,您应该使用:

while (actr == true) {

甚至更好:

while (actr) {

但是,即使您修复了该问题,您的 while 循环仍将永远不会退出。这是因为您 正忙着等待 并阻止程序继续进行。 这将阻止 Processing 更改 key 变量。

与其忙着等待,只需跟踪您所处的模式,这决定了 + 和 - 键的作用。您可以使用一系列布尔值:

boolean size = true;
boolean red = false;
boolean green = false;
boolean blue = false;

void keyPressed(){
  if(key == 'r'){ // Activates if 'r' is pressed

    if (key == '=') { 
      if(size){
         x++;
      }
      else if(red){
        r++;
      }
    }
    else if (key == '-'){
      if(size){
         x++;
      }
      else if(red){
        r++;
      }
    }

    if (key == 'd') { // Activates if 'd' is pressed
      size = true;
      red = false;
      blue = false;
      green = false;
    }
    else if(key == 'r'){
      size = false;
      red = true;
      blue = false;
      green = false;
    }
  }
}

这只是一种方法,我没有包含所有代码,但这应该比您的忙碌等待更好。