KIKI 发表于 2021-6-30 13:00:02

Processing笔记04—鼠标键盘识别



前面我们学习了Processing中基本图形的绘制,本篇来介绍Processing中对于鼠标键盘输入设备的识别,有了输入设备,我们就可以更加灵活的进行控制了。

## 鼠标坐标

在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()**,当鼠标移动速度缓慢时画出来的是细线,当移动速度快时,画出的线就会变粗。



## 鼠标单击

除了定位鼠标之外,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);
}
}
```

如上代码,当鼠标左键按下会在左侧画一个绿色的圆,当中间滚轮被按下会在中间画一个黑色的圆,当右键被按下会在右侧画一个红色的圆,当任何按键抬起后清除显示。值得注意的是,当三个按键都被按下,三个圆都会显示,但当其中任何一个鼠标按键被释放,则全部清除显示。



## 键盘按键

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);
}
```



有了对鼠标键盘输入设备的识别,我们就可以做很多好玩的小游戏了,例如贪吃蛇、俄罗斯方块等等,你也来试试吧。

三春牛-创客 发表于 2023-8-10 09:38:52

赞赞赞赞赞

三春牛-创客 发表于 2023-8-10 09:39:53

不错不错

花生编程 发表于 2023-8-11 09:44:05

厉害厉害

花生编程 发表于 2023-8-11 09:45:06

学习了,感谢分享!
页: [1]
查看完整版本: Processing笔记04—鼠标键盘识别