玩命加载中 . . .

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」,更多精彩内容分享。

扫码关注


文章作者: Tony
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Tony !