2014-09-21 63 views
-1

我現在有幾個函數在draw方法中被按鍵激活。基本上,有一個複雜的正方形網格,並且每個正方形的顏色都是基於用戶按下的鍵('a'使其變爲紅色,'b'使其變成綠色等等),用分配給每個正方形的方法填充。在處理中重置KeyPressed()

但是,每次按下第一個按鍵時,都會根據該按鍵填充所有的方塊(例如,如果用戶按下的第一個按鍵爲'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

我想你想要的功能keyPressed()不是布爾全局變量keyPressed。請參閱文檔http://processing.org/reference/keyPressed_.html。你可以將鍵映射到一個特定的盒子 - 我在這裏展示一個簡單的非最優方式,其中鍵映射到一個索引,然後讓你查找正確的矩形的參數,就像我展示的那樣。這很簡單,但不是一般或非常漂亮,但它的作品。

我建議避免像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]); 
}