《PROCESSING学习笔记(三).doc》由会员分享,可在线阅读,更多相关《PROCESSING学习笔记(三).doc(22页珍藏版)》请在三一办公上搜索。
1、5/响应 那些响应鼠标、键盘和其他设备输入的代码应该连续地运行。要做到这样,在draw()函数中写下这些更新的代码。示例5-1:draw()函数 要看看draw()函数是怎么运行的,试着运行这个程序: void draw() /在控制台显示帧数 println(Im drawing); println(frameCount);将会看到:它是动态的示例5-2:setup()函数 为了完成循环的draw()函数,Processing有一个setup()函数,在程序运行开始时运行一遍。void setup() println(Im drawing);void draw() println(Im ru
2、nning);代码运行时,在控制台上会有如下输出:文本“Im running”会一直持续地被写到控制台上,直到程序结束。示例5-3:当setup()遇到draw()函数下面的例子把以上讲的两个函数都放在一起:int x=280;int y=-100;int diameter=380;void setup() size(480,120); smooth(); fill(102);void draw() background(204); ellipse(x,y,diameter,diameter); 图示:跟随既然我们可以让我们的程序持续地运行了,那么我们就可以跟踪鼠标的位置然后使用得到的这些数值
3、来移动屏幕上的元素。示例5-4:跟踪鼠标 mouseX变量保存着X轴的值,mouseY变量保存着Y轴的值。代码:void setup() size(480,120); fill(0,152); smooth(); noStroke();void draw() ellipse(mouseX,mouseY,9,9);图示:当鼠标移动的很快时,圆圈会被放置的十分分散。示例5-5:跟随你的点 在这个示例中,当每次draw()函数运行时,一个新的圆就被画在窗口上。为了刷新屏幕,并且每次只有最新画上的圆显示在上面,我们需要在draw()函数一开始就调用background()函数,这要在形状被绘制之前做好
4、。代码:void setup() size(480,120); fill(0,152); smooth(); noStroke();void draw() background(205); ellipse(mouseX,mouseY,9,9);图示:background()函数会清空屏幕,所以一定要保证它被放在draw()函数中,并且在其他函数之前。否则,画上的形状会被清空的。示例5-6:连续作画 pmouseX和pmouseY两个变量存储着前一帧鼠标的位置。像mouseX和mouseY一样,这些特殊的变量是在每次draw()函数运行的时候都更新的。当它们被联合在一起使用时,我们可以通过连接当
5、前位置和最近一次的位置来绘制连续的线。代码:void setup() size(480,120); strokeWeight(4); smooth(); stroke(0,102);void draw() line(mouseX,mouseY,pmouseX,pmouseY);图示:示例5-7:连续设置厚度 PmouseX和pmouseY两个变量也可以用来计算鼠标移动的速度。这是通过测量当前点和鼠标经过的上一个位置的距离来做到的。如果鼠标移动较慢,那么这个距离也很小,但是如果鼠标开始加速移动,那么距离就会增加。就像例子中使用的一样,dist()函数简化了计算。在这里,在这里,用鼠标移动的速度来
6、表示线的厚度。 代码:void setup()size(480,120);smooth();stroke(0,102);void draw() float weight=dist(mouseX,mouseY,pmouseX,pmouseY); strokeWeight(weight); line(mouseX,mouseY,pmouseX,pmouseY); 图示:示例5-8:轻随(easing) 用easing技术,我们可以活的两个值:当前和向前变化的值。在程序的每一步,当前值仅仅是向目标值移动了一小步。代码:float x;float easing=0.01;float diameter=
7、12;void setup() size(480,120); smooth();void draw() float targetX=mouseX; x+=(targetX-x)*easing; ellipse(x,40,12,12); println(targetX+:+x); 图示:X变量的值总是越来越向targetX接近的。追上targetX的速度是由easing这个变量表示的,范围是01.easing的值越小,延迟就会越大。如果值大到1,那么就不存在延迟了。运行5-8,确切的值是通过控制台在函数println()中输出的。当你移动了鼠标,注意数字是如何让分离的,但是当鼠标停止移动,那么X
8、值会越来越接近targetX.示例5-9:用easing作出平滑的曲线 在这个示例中,“轻随”技术被运用到了示例5-7上,比较之下,可以看出线条更加平滑了:代码:float x,y,px,py;float easing=0.05;void setup() size(480,120); smooth(); stroke(0,102);void draw() float targetX=mouseX; x+=(targetX-x)*easing; float targetY=mouseY; y+=(targetY-y)*easing; float weight=dist(x,y,px,py); s
9、trokeWeight(weight); line(x,y,px,py); px=x; py=y;图示:映射 当数字被画到屏幕上时,把值从一个范围转换到另一个范围总是很有用的。示例5-10:将值映射到范围变量mouseX经常在0和窗口的宽度之间,当然你想将这些值映射到其他坐标范围也是可行的。你可以使用一个数来分割mouseX以减少范围,然后增加或者减少一个数来左移火右移,以做到这种效果。代码:void setup() size(480,480); strokeWeight(12); smooth();void draw() background(204); stroke(255); line(
10、240,240,mouseX,mouseY); /白线 stroke(0); float mx=mouseX/2+60; line(240,240,mx,mouseY); /黑线图示: map()函数是一个更通用的方法来实现这样的效果。它将一个变量从它的范围转换到另一个范围。第一个参数是一个需要转换的变量,第二个和第三个分别是它的最小值和最大值。第四个和第五个参数是需要转换到的目的范围的最小值和最大值。 map()函数将背后的数学转换隐藏了。示例5-11:通过map()函数来映射这个示例将5-10示例使用map()函数重写了。代码:void setup() size(240,120); str
11、okeWeight(12); smooth();void draw() background(204); stroke(255); line(120,60,mouseX,mouseY); /白线 stroke(0); float mx=map(mouseX,0,width,60,180); line(120,60,mx,mouseY);/黑线图示:map()函数使代码更容易阅读了。因为最小值和最大值被清除地写成了参数。在这个示例中,mouseX值从原来的0width转换成了6080。点击 除了鼠标的位置,Processing同样跟踪者鼠标按键是否被按下的信息。mousePressed变量在当鼠
12、标按键按下和放松时有着不同的值。mousePressed变量是一个布尔型变量,就是它只有两个值:真和假。当鼠标按下时,mousePressed值变为真。示例5-12:点击鼠标 mousePressed变量的使用是通过if语句来决定一行代码运行与否的。代码:void setup() size(240,120); smooth(); strokeWeight(30);void draw() background(204); stroke(102); line(40,0,70,height); if(mousePressed=true) stroke(0); line(0,70,width,50);
13、图示: 敲击前敲击后在这个程序中,if模块中的代码只有当鼠标按键按下时才执行。当按键没有被按下时,这行代码是被忽略的。示例5-13:当没有点击检测if拓展一下,加个else代码:void setup() size(340,120); smooth(); strokeWeight(30);void draw() background(204); stroke(102); line(40,0,70,height); if(mousePressed) stroke(0); else stroke(255); line(0,70,width,50);图示: 点击前 点击后示例5-14:鼠标不同键位点击
14、如果你的鼠标有多个键位,Procrssing同样会追踪是点击了哪个键。mouseButton变量可以是下面任意3种值之一:LEFT、CENTER、RIGHT。为了确认是哪个键被按下了,=号是必须的,就像下面的例子:代码:void setup() size(120,120); smooth(); strokeWeight(30);void draw() background(204); stroke(102); line(40,0,70,height); if(mousePressed) if(mouseButton=LEFT) stroke(255,0,0); else if(mouseBut
15、ton=RIGHT) stroke(0); else stroke(255); line(0,70,width,50); 图示: 未点击 左击 中击 右击一个程序可以有许多个if.else.结构,可以比这些简单地程序多得多。它们可以被连接在一起,成为一个长长的序列(并列的,分别为不同的选择判断)。也可以被嵌套的存在,如果在if中需要更多的if来判断更复杂的情况的话。一个if结构可以和mouseX和mouseY一起使用来决定鼠标在窗口的位置。 示例5-15:寻找鼠标 这个示例检测了鼠标是在这根线的左侧还是右侧,然后像鼠标的位置移动。代码:float x;int offset=10;void se
16、tup() size(240,120); smooth(); x=width/2;void draw() background(204); if(mouseXx) x+=0.5; offset=-10; if(mouseXx) x-=0.5; offset=10; line(x,0,x,height); line(mouseX,mouseY,mouseX+offset,mouseY-10);line(mouseX,mouseY,mouseX+offset,mouseY+10);line(mouseX,mouseY,mouseX+offset*3,mouseY);图示: 示例5-16:圆的边界
17、对于圆形测试,我们使用dist()函数来获得从圆心到鼠标的距离,然后我们检验它是否比半径更小。如果是这样,我们知道鼠标在圆之内。在这个示例中,当鼠标在圆姓区域内,圆就变大。代码:int x=120;int y=60;int radius=12;void setup() size(240,120); smooth(); ellipseMode(RADIUS);void draw() background(204); float d=dist(mouseX,mouseY,x,y); if(dx)&(mouseXy)&(mouseYy+h) fill(0); else fill(255); rect
18、(x,y,w,h);图示:前后类型 Processing跟踪键盘上的任何一个键被按下与否,同样也包括最后一个按下的键。像mousePressed变量一样,当有任何键按下时keyPressed变量,为真,为真。当没有键按下时,它为假。示例5-18:按下一个键 在这个示例中,第二条线只有当某一键被按下时才会被画出。代码:void setup() size(240,120); smooth();void draw() background(204); line(20,20,220,100);if(keyPressed) line(220,20,20,100);图示:Key变量保存了最近依次按下的键的
19、信息。它的数据类型是char字符型,这是character的简写。一个字符型的变量可以存储任何单个字符,包括字母表的字母,数字和符号。不像string字符串型的值,string是用双引号引起来的,而char字符型使用单引号。下面是一个声明和赋值字符变量的例子。 Char c=A; /声明并指定变量不像keyPressed是布尔型,当一个按键每次放开时就转化成假,而key这个变量会一直保留它的结果,知道另一个键被按下。接下来的示例是使用key的值在屏幕上画出这些字符的。每次当一个新的键被按下的时候,它的值就被更换成一个新的字符,然后画出来。一些案件,数Shift和Alt没有一个可见的字符表示,所
20、以当你按下它们时,没有东西会被画出来。示例5-19:画一些字符 这个示例介绍用textSize()函数来设置字母的大小。textSize()函数把文本放置在X坐标轴的中间位置,然后text()函数来绘制这个字母。代码:void setup() size(120,120); textSize(64); textAlign(CENTER);void draw() background(0); text(key,60,80);图示: 示例5-20:检验特殊的键 在这个示例中,我们输入的H或者N。我们使用比较操作,=符号,来看按下的键所代表的字符是否为我们想要的。代码:void setup() siz
21、e(120,120); smooth();void draw() background(204); if(keyPressed) if(key=h)|(key=H) line(30,60,90,60); if(key=n)|(key=N) line(30,20,90,100); line(30,20,30,100); line(90,20,90,100); 图示:示例5-21:用方向键来移动 参考资料 爱上Processing 人民邮电出版社 2013-7-10我的大学爱情观目录:一、 大学概念二、 分析爱情健康观三、 爱情观要三思四、 大学需要对爱情要认识和理解五、 总结1、什么是大学爱情:
22、大学是一个相对宽松,时间自由,自己支配的环境,也正因为这样,培植爱情之花最肥沃的土地。大学生恋爱一直是大学校园的热门话题,恋爱和学业也就自然成为了大学生在校期间面对的两个主要问题。恋爱关系处理得好、正确,健康,可以成为学习和事业的催化剂,使人学习努力、成绩上升;恋爱关系处理的不当,不健康,可能分散精力、浪费时间、情绪波动、成绩下降。因此,大学生的恋爱观必须树立在健康之上,并且树立正确的恋爱观是十分有必要的。因此我从下面几方面谈谈自己的对大学爱情观。2、什么是健康的爱情:1) 尊重对方,不显示对爱情的占有欲,不把爱情放第一位,不痴情过分;2) 理解对方,互相关心,互相支持,互相鼓励,并以对方的幸
23、福为自己的满足; 3) 是彼此独立的前提下结合;3、什么是不健康的爱情:1)盲目的约会,忽视了学业;2)过于痴情,一味地要求对方表露爱的情怀,这种爱情常有病态的夸张;3)缺乏体贴怜爱之心,只表现自己强烈的占有欲;4)偏重于外表的追求;4、大学生处理两人的在爱情观需要三思:1. 不影响学习:大学恋爱可以说是一种必要的经历,学习是大学的基本和主要任务,这两者之间有错综复杂的关系,有的学生因为爱情,过分的忽视了学习,把感情放在第一位;学习的时候就认真的去学,不要去想爱情中的事,谈恋爱的时候用心去谈,也可以交流下学习,互相鼓励,共同进步。2. 有足够的精力:大学生活,说忙也会很忙,但说轻松也是相对会轻
24、松的!大学生恋爱必须合理安排自身的精力,忙于学习的同时不能因为感情的事情分心,不能在学习期间,放弃学习而去谈感情,把握合理的精力,分配好学习和感情。3、 有合理的时间;大学时间可以分为学习和生活时间,合理把握好学习时间和生活时间的“度”很重要;学习的时候,不能分配学习时间去安排两人的在一起的事情,应该以学习为第一;生活时间,两人可以相互谈谈恋爱,用心去谈,也可以交流下学习,互相鼓励,共同进步。5、大学生对爱情需要认识与理解,主要涉及到以下几个方面:(一) 明确学生的主要任务“放弃时间的人,时间也会放弃他。”大学时代是吸纳知识、增长才干的时期。作为当代大学生,要认识到现在的任务是学习学习做人、学
25、习知识、学习为人民服务的本领。在校大学生要集中精力,投入到学习和社会实践中,而不是因把过多的精力、时间用于谈情说爱浪费宝贵的青春年华。因此,明确自己的目标,规划自己的学习道路,合理分配好学习和恋爱的地位。(二) 树林正确的恋爱观提倡志同道合、有默契、相互喜欢的爱情:在恋人的选择上最重要的条件应该是志同道合,思想品德、事业理想和生活情趣等大体一致。摆正爱情与学习、事业的关系:大学生应该把学习、事业放在首位,摆正爱情与学习、事业的关系,不能把宝贵的大学时间,锻炼自身的时间都用于谈情说有爱而放松了学习。 相互理解、相互信任,是一份责任和奉献。爱情是奉献而不时索取,是拥有而不是占有。身边的人与事时刻为
26、我们敲响警钟,不再让悲剧重演。生命只有一次,不会重来,大学生一定要树立正确的爱情观。(三) 发展健康的恋爱行为 在当今大学校园,情侣成双入对已司空见惯。抑制大学生恋爱是不实际的,大学生一定要发展健康的恋爱行为。与恋人多谈谈学习与工作,把恋爱行为限制在社会规范内,不致越轨,要使爱情沿着健康的道路发展。正如马克思所说:“在我看来,真正的爱情是表现在恋人对他的偶像采取含蓄、谦恭甚至羞涩的态度,而绝不是表现在随意流露热情和过早的亲昵。”(四) 爱情不是一件跟风的事儿。很多大学生的爱情实际上是跟风的结果,是看到别人有了爱情,看到别人幸福的样子(注意,只是看上去很美),产生了羊群心理,也就花了大把的时间和
27、精力去寻找爱情(五) 距离才是保持爱情之花常开不败的法宝。爱情到底需要花多少时间,这是一个很大的问题。有的大学生爱情失败,不是因为男女双方在一起的时间太少,而是因为他们在一起的时间太多。相反,很多大学生恋爱成功,不是因为男女双方在一起的时间太少,而是因为他们准确地把握了在一起的时间的多少程度。(六) 爱情不是自我封闭的二人世界。很多人过分的活在两人世界,对身边的同学,身边好友渐渐的失去联系,失去了对话,生活中只有彼此两人;班级活动也不参加,社外活动也不参加,每天除了对方还是对方,这样不利于大学生健康发展,不仅影响学习,影响了自身交际和合作能力。总结:男女之间面对恋爱,首先要摆正好自己的心态,树立自尊、自爱、自强、自重应有的品格,千万不要盲目地追求爱,也不宜过急追求爱,要分清自己的条件是否成熟。要树立正确的恋爱观,明确大学的目的,以学习为第一;规划好大学计划,在不影响学习的条件下,要对恋爱认真,专一,相互鼓励,相互学习,共同进步;认真对待恋爱观,做健康的恋爱;总之,我们大学生要树立正确的恋爱观念,让大学的爱情成为青春记忆里最美的风景,而不是终身的遗憾!