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);
}
```
有了对鼠标键盘输入设备的识别,我们就可以做很多好玩的小游戏了,例如贪吃蛇、俄罗斯方块等等,你也来试试吧。 赞赞赞赞赞 不错不错 厉害厉害 学习了,感谢分享!
页:
[1]