2021-6-30 13:00:02 [显示全部楼层]
3244浏览
查看: 3244|回复: 4

[入门教程] Processing笔记04—鼠标键盘识别

[复制链接]

Processing笔记04—鼠标键盘识别图1

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

鼠标坐标

在Processing中使用mouseXmouseY变量来存储当前鼠标的坐标位置,默认值都为0。在程序运行中,这两个变量会不断刷新保存最新的鼠标坐标信息。

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

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

Processing笔记04—鼠标键盘识别图2

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

Processing笔记04—鼠标键盘识别图3

鼠标单击

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

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

Processing笔记04—鼠标键盘识别图4

键盘按键

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()函数用来绘制字体。

Processing笔记04—鼠标键盘识别图5

我们可以通过比较操作符来判断特定字符是否被按下,但是像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);
}

Processing笔记04—鼠标键盘识别图6

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

三春牛-创客  初级技神

发表于 2023-8-10 09:38:52

赞赞赞赞赞
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-8-10 09:39:53

不错不错
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-8-11 09:44:05

厉害厉害
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-8-11 09:45:06

学习了,感谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail