重置处理中的KeyPressed()

时间:2014-09-21 15:51:31

标签: javascript processing draw keypress

我现在在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选项,以便下次接收另一个键?

1 个答案:

答案 0 :(得分:1)

我认为您希望函数keyPressed()不是布尔全局变量keyPressed。请参阅http://processing.org/reference/keyPressed_.html上的文档。

在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]);
}