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