3.4 鼠标点击和键盘操作
当前,你正使用setup()和draw()框架,以及mouseX和mouseY这样的关键词来构建动态的、可交互的Processing草图。但是,还有一个重要的交互形式没有讨论—点击鼠标!
点击鼠标时,如何让Processing发生相应的交互行为?为了了解这一点,你需要回到程序的运行流程中去。你已经了解setup()仅运行一次,而draw()会往复运行。那么鼠标点击应该在什么时候发生?鼠标点击(以及键盘操作)所触发的事件在Processing中被叫做响应事件(event)。如果你希望在点击鼠标时,Processing产生某些交互行为(例如“将背景颜色变为红色”),那么你需要增加一个代码块来实现这个事件。
发生一个事件时,这个响应事件“函数”会告诉程序去执行什么代码。和setup()一样,这个代码仅仅执行一次。也就是说,针对每个事件的发生仅会执行一次。而一个事件(例如鼠标点击)可以发生多次。
你需要学习两个新的函数:
mousePressed()—处理鼠标点击。
keyPressed()—处理键盘操作。
下面的这个示例使用了这两个事件函数:点击鼠标时,增加方块;按下键盘的按键时,清空所有内容。
示例3-5:mousePressed()和keyPressed()
在示例3-5中整个程序的流程里,我使用了4个函数。该程序以setup()函数开始,在这里对窗口尺寸和背景颜色进行初始化。接下来是draw()函数,它无限循环。由于draw()函数中并没有代码,因此窗口依旧是空白。然而,由于我增加了两个新的函数:mousePressed()和keyPressed(),这两个函数中的代码正翘首以待。当用户点击鼠标(或者按下键盘的按键)的时候,它即刻产生交互行为,执行其内部的代码,而且仅仅执行一次。
练习3-8:在draw()函数中增加background(255)。为什么程序会停止运行?
我现在已经准备好为Zoog添加下面所有的功能元素了。
Zoog的整个身体跟随鼠标移动。
Zoog的眼睛颜色由鼠标位置决定。
Zoog的腿部,由之前的鼠标位置到当前的鼠标位置进行绘制。
点击鼠标时,窗口上将会显示一条信息:“带我去见你的首领!”(Take me to your leader!)
注意示例3-6新增加的frameRate()函数。frameRate()函数需要至少一个数值用来设定Processing运行draw()时的速度。比如frameRate(30)意味着每秒30帧,这个数值也是传统计算机动画的速度。如果你不使用frameRate()函数,那么Processing会以每秒60帧来运行草图。由于每个电脑可以按照不同的速度运行,你可以使用frameRate()函数确保多台电脑的运行速度相同。
不过这个帧频设置只是其运行的最大值。如果你的草图要绘制一百万个矩形,那么会耗时很长,运行速度也很慢。
示例3-6:可以互动的Zoog
第一节课的项目
(事实上,通过第1章~第3章中的课后练习,你已经完成这个项目的大部分内容了。这个项目是将所有课程内容元素组合到一起。你既可以从头开始一个新的设计,也可以使用课后练习中的内容。)
1.使用RGB颜色和简单的图形函数来设计一个静态的图形。
2.使静态的图形草图变为动态的草图,也就是说草图可以和鼠标进行互动。比如图形跟随鼠标运动、根据鼠标移动改变图形尺寸、改变颜色等。
使用下面的空白为你的项目设计草图,做笔记和书写伪码。