Javascript 正在处理中重置KeyPressed()

Javascript 正在处理中重置KeyPressed(),javascript,processing,draw,keypress,Javascript,Processing,Draw,Keypress,我现在在draw方法中有几个函数,它们是通过按键激活的。基本上,有一个复杂的正方形网格,每个正方形的颜色根据用户按下的键填充(“a”表示红色,“b”表示绿色,等等),并为每个正方形指定一种方法 但是,每次按下第一个键时,它都会根据该键填充所有方块(例如,如果用户按下的第一个键是“a”,则所有方块都将是红色,而不仅仅是第一个)。如何使按下的第一个键仅适用于第一个方法,第二个键适用于第二个方法,依此类推,即使在循环draw()方法中也是如此。下面是一个过于简化的版本: void draw(){

我现在在draw方法中有几个函数,它们是通过按键激活的。基本上,有一个复杂的正方形网格,每个正方形的颜色根据用户按下的键填充(“a”表示红色,“b”表示绿色,等等),并为每个正方形指定一种方法

但是,每次按下第一个键时,它都会根据该键填充所有方块(例如,如果用户按下的第一个键是“a”,则所有方块都将是红色,而不仅仅是第一个)。如何使按下的第一个键仅适用于第一个方法,第二个键适用于第二个方法,依此类推,即使在循环draw()方法中也是如此。下面是一个过于简化的版本:

void draw(){
     BoxOne();
     BoxTwo();
}
void boxOne(){
     if(keyPressed){
       if(key == 'a'){
         fill(red);
       }
       if(key == 'b'){
         fill(green);
       }
       rect(10, 10, 10, 10);
     }
}
void boxTwo(){
     if(keyPressed){
       if(key == 'a'){
         fill(red);
       }
       if(key == 'b'){
         fill(green);
       }
       rect(20, 20, 10, 10);
     }
}

我想,有没有办法“重置”keyPressed选项,以便下次输入另一个键?

我想您想要的是keyPressed()函数,而不是布尔全局变量keyPressed。请参阅上的文档

在keyPressed()中,您可以将键映射到特定的框-我在这里展示了一种简单的非最佳方法,其中键映射到一个索引,然后让您可以像我展示的那样查找正确矩形的参数。这很简单,但不是一般的,也不是很漂亮,但很管用

我建议避免像boxOne()和boxTwo()中那样的重复代码-它们只在框坐标上有所不同。如果将这些替换为由框编号驱动的更通用的fillBox()

如果一次只希望显示一个框,请在调用fillBox()之前调用background()函数

int box = -1;
int boxParams[] = {10, 10, 10, 10
                 , 20, 20, 10, 10
                 , 30, 30, 10, 10};

void draw(){
    //background(128, 128, 128);  
    if(box >= 0) {
        fillBox(box);
    }
}

void keyPressed() {
   if(key == 'a')
       box = 0;
   else if(key == 'b')
       box = 1;
   else if(key == 'c')
       box = 2;
   else
       box = -1;
}

void fillBox(int box){
   if(key == 'a'){
     fill(255, 0, 0);
   }
   else if(key == 'b'){
     fill(0,255, 0);
   }
   else if(key == 'c'){
     fill(0,0, 255);
   }
   rect(boxParams[box * 4], boxParams[box * 4 + 1], boxParams[box * 4 + 2], boxParams[box * 4 + 3]);
}