PROCESSING学习笔记(三).doc_第1页
PROCESSING学习笔记(三).doc_第2页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 running);代码运行时,在控制台上会有如下输出:文本“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); 图示:跟随既然我们可以让我们的程序持续地运行了,那么我们就可以跟踪鼠标的位置然后使用得到的这些数值来移动屏幕上的元素。示例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()函数,这要在形状被绘制之前做好。代码: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()函数运行的时候都更新的。当它们被联合在一起使用时,我们可以通过连接当前位置和最近一次的位置来绘制连续的线。代码:void setup() size(480,120); strokeweight(4); smooth(); stroke(0,102);void draw() line(mousex,mousey,pmousex,pmousey);图示:示例5-7:连续设置厚度 pmousex和pmousey两个变量也可以用来计算鼠标移动的速度。这是通过测量当前点和鼠标经过的上一个位置的距离来做到的。如果鼠标移动较慢,那么这个距离也很小,但是如果鼠标开始加速移动,那么距离就会增加。就像例子中使用的一样,dist()函数简化了计算。在这里,在这里,用鼠标移动的速度来表示线的厚度。 代码: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=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值会越来越接近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); strokeweight(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(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); strokeweight(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变量在当鼠标按键按下和放松时有着不同的值。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);图示: 敲击前敲击后在这个程序中,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:鼠标不同键位点击如果你的鼠标有多个键位,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(mousebutton=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 setup() 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:圆的边界 对于圆形测试,我们使用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(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变量保存了最近依次按下的键的信息。它的数据类型是char字符型,这是character的简写。一个字符型的变量可以存储任何单个字符,包括字母表的字母,数字和符号。不像string字符串型的值,string是用双引号引起来的,而char字符型使用单引号。下面是一个声明和赋值字符变量的例子。 char c=a; /声明并指定变量不像keypressed是布尔型,当一个按键每次放开时就转化成假,而key这个变量会一直保留它的结果,知道另一个键被按下。接下来的示例是使用key的值在屏幕上画出这些字符的。每次当一个新的键被按下的时候,它的值就被更换成一个新的字符,然后画出来。一些案件,数shift和alt没有一个可见的字符表示,所以当你按下它们时,没有东西会被画出来。示例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() size(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、 大学概念2、 分析爱情健康观3、 爱情观要三思4、 大学需要对爱情要认识和理解5、 总结1、什么是大学爱情:大学是一个相对宽松,时间自由,自己支配的环境,也正因为这样,培植爱情之花最肥沃的土地。大学生恋爱一直是大学校园的热门话题,恋爱和学业也就自然成为了大学生在校期间面对的两个主要问题。恋爱关系处理得好、正确,健康,可以成为学习和事业的催化剂,使人学习努力、成绩上升;恋爱关系处理的不当,不健康,可能分散精力、浪费时间、情绪波动、成绩下降。因此,大学生的恋爱观必须树立在健康之上,并且树立正确的恋爱观是十分有必要的。因此我从下面几方面谈谈自己的对大学爱情观。2、什么是健康的爱情:1) 尊重对方,不显示对爱情的占有欲,不把爱情放第一位,不痴情过分;2) 理解对方,互相关心,互相支持,互相鼓励,并以对方的幸福为自己的满足; 3) 是彼此独立的前提下结合;3、什么是不健康的爱情:1)盲目的约会,忽视了学业;2)过于痴情,一味地要求对方表露爱的情怀,这种爱情常有病态的夸张;3)缺乏体贴怜爱之心,只表现自己强烈的占有欲;4)偏重于外表的追求;4、大学生处理两人的在爱情观需要三思:1. 不影响学习:大学恋爱可以说是一种必要的经历,学习是大学的基本和主要任务,这两者之间有错综复杂的关系,有的学生因为爱情,过分的忽视了学习,把感情放在第一位;学习的时候就认真的去学,不要去想爱情中的事,谈恋爱的时候用心去谈,也可以交流下学习,互相鼓励,共同进步。2. 有足够的精力:大学生活,说忙也会很忙,但说轻松也是相对会轻松的!大学生恋爱必须合理安排自身的精力,忙于学习的同时不能因为感情的事情分心,不能在学习期间,放弃学习而去谈感情,把握合理的精力,分配好学习和感情。3、 有合理的时间;大学时间可以分为学习和生活时间,合理把握好学习时间和生活时间的“度”很重要;学习的时候,不能分配学习时间去安排两人的在一起的事情,应该以学习为第一;生活时间,两人可以相互谈谈恋爱,用心去谈,也可以交流下学习,互相鼓励,共同进步。5、大学生对爱情需要认识与理解,主要涉及到以下几个方面:(1) 明确学生的主要任务“放弃时间的人,时间也会放弃他。”大学时代是吸纳知识、增长才干的时期。作为当代大学生,要认识到现在的任务是学习学习做人、学习知识、学习为人民服务的本领。在校大学生要集中精力,投入到学习和社会实践中,而不是因把过多的精力、时间用于谈情说爱浪费宝贵的青春年华。因此,明确自己的目标,规划自己的学习道路,合理分配好学习和恋爱的地位。(2) 树林正确的恋爱观提倡志同道合、有默契、相互喜欢的爱情:在恋人的选择上最重要的条件应该是志同道合,思想品德、事业理想和生活情趣等大体一致。摆正爱情与学习、事业的关系:大学生应该把学习、事业放在首位,摆正爱情与学习、事业的关系,不能把宝贵的大学时间,锻炼自身的时间都用于谈情说有爱而放松了学习。 相互

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论