Processing筆記04—鼠標鍵盤識別

前面我們學習了Processing中基本圖形的繪製,本篇來介紹Processing中對於鼠標鍵盤輸入設備的識別,有了輸入設備,我們就可以更加靈活的進行控制了。

1. 鼠標座標

在Processing中使用mouseXmouseY變量來存儲當前鼠標的座標位置,默認值都爲0。在程序運行中,這兩個變量會不斷刷新保存最新的鼠標座標信息。

void setup()
{
  size(480, 120);
  background(0, 0, 255);
  fill(0, 255, 0);
}

void draw()
{
  ellipse(mouseX, mouseY, 20, 20);
}

鼠標跟隨

此外pmouseXpmouseY這兩個變量用來存儲前一幀鼠標的位置數據,如同mouseXmouseY,這兩個系統變量在每次運行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變量來存儲被點擊的按鍵類型,它們的值爲LEFTCENTERRIGHT

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變量來判斷具體是哪一個特殊按鍵,常用值爲ALTSHIFTCONTROL,以及方向鍵UPDOWNLEFTRIGHT

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學習資料。
個人博客
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章