前面我們學習了Processing中基本圖形的繪製,本篇來介紹Processing中對於鼠標鍵盤輸入設備的識別,有了輸入設備,我們就可以更加靈活的進行控制了。
1. 鼠標座標
在Processing中使用mouseX和mouseY變量來存儲當前鼠標的座標位置,默認值都爲0。在程序運行中,這兩個變量會不斷刷新保存最新的鼠標座標信息。
void setup()
{
size(480, 120);
background(0, 0, 255);
fill(0, 255, 0);
}
void draw()
{
ellipse(mouseX, mouseY, 20, 20);
}
此外pmouseX和pmouseY這兩個變量用來存儲前一幀鼠標的位置數據,如同mouseX和mouseY,這兩個系統變量在每次運行draw()函數時都會刷新。
我們可以配合使用它們,通過測量鼠標當前位置和上一幀位置之間的距離,來計算鼠標的移動速度。這裏的距離計算藉助**dist()**函數,參數爲被測量的兩個點的座標。
void setup()
{
size(480, 120);
background(0, 0, 255);
stroke(0, 255, 0);
}
void draw()
{
float weight=dist(mouseX, mouseY, pmouseX, pmouseY);
strokeWeight(weight);
line(mouseX, mouseY, pmouseX, pmouseY);
}
如上代碼,將獲取的前後鼠標位置之間的距離賦值給描邊粗細函數strokeWeight(),當鼠標移動速度緩慢時畫出來的是細線,當移動速度快時,畫出的線就會變粗。
2. 鼠標單擊
除了定位鼠標之外,Processing還能捕獲鼠標是否被單擊。使用mousePressed變量來標記鼠標的單擊和釋放狀態。這個變量是布爾類型的,當按鍵被按下爲真,鬆開爲假。
一般我們的鼠標都是多於一個按鍵的,Processing使用mouseButton變量來存儲被點擊的按鍵類型,它們的值爲LEFT、CENTER、RIGHT。
void setup()
{
size(480, 120);
background(0, 0, 255);
}
void draw()
{
if (mousePressed)
{
if (mouseButton==LEFT)
{
fill(0, 255, 0);
ellipse(100, 50, 50, 50);
} else if (mouseButton==CENTER) {
fill(0);
ellipse(200, 50, 50, 50);
} else {
fill(255, 0, 0);
ellipse(300, 50, 50, 50);
}
} else {
background(0, 0, 255);
}
}
如上代碼,當鼠標左鍵按下會在左側畫一個綠色的圓,當中間滾輪被按下會在中間畫一個黑色的圓,當右鍵被按下會在右側畫一個紅色的圓,當任何按鍵擡起後清除顯示。值得注意的是,當三個按鍵都被按下,三個圓都會顯示,但當其中任何一個鼠標按鍵被釋放,則全部清除顯示。
3. 鍵盤按鍵
Processing中也會跟蹤鍵盤上哪一個按鍵被按下,以及最後一個被按下的鍵。使用keyPressed變量來標記按鍵狀態,當按鍵被按下爲真,鬆開按鍵爲假。key變量存儲最後一個被按下的鍵的信息,其類型爲字符型(char),每當有新的按鍵被按下,key的值就會刷新。
void setup()
{
size(480, 120);
background(0, 0, 255);
textSize(100);
textAlign(CENTER);
}
void draw()
{
background(0, 0, 255);
text(key, 200, 100);
}
如上代碼用到了繪製字體相關函數,**textSize()**用來設置字體大小,**textAlign()**設置文字對齊方式,**text()**函數用來繪製字體。
我們可以通過比較操作符來判斷特定字符是否被按下,但是像Shift、Alt以及方向按鍵卻很難這麼做,因爲它們沒有特定的字符表示。我們需要先檢測是否有編碼爲CODED的按鍵被按下,然後再用keyCode變量來判斷具體是哪一個特殊按鍵,常用值爲ALT、SHIFT、CONTROL,以及方向鍵UP、DOWN、LEFT、RIGHT。
int x = 350;
int y = 150;
void setup()
{
size(700, 300);
background(0, 0, 255);
fill(0, 255, 0);
}
void draw()
{
if (keyPressed && (key == CODED))
{
switch(keyCode)
{
case LEFT:
x-=10;
break;
case RIGHT:
x+=10;
break;
case UP:
y-=5;
break;
case DOWN:
y+=5;
break;
}
}
ellipse(x, y, 80, 80);
}
有了對鼠標鍵盤輸入設備的識別,我們就可以做很多好玩的小遊戲了,例如貪吃蛇、俄羅斯方塊等等,你也來試試吧。
關注公衆號「TonyCode」,更多精彩內容分享。
回覆「1024」獲取1000G學習資料。
個人博客