学习笔记

Processing:条件式

1. 布尔表达式通常被称为条件式(conditionals)。 2. 条件式链(各种else if保准让你晕头转向): if (boolean expression #1) { // 如果布尔表达式 #1 为真时执行的代码 } else if (boolean expression #2) { // 如果布尔表达式 #2 为真时执行的代码 } else if (boolean expression #n) { // 如果布尔表达式 #n 为真时执行的代码 } else { //…

Processing:变量

1. 申明一个变量:类型+名称,一个变量的名称必须是一个词(不带空格),必须以字母而不是数字开头(虽然可含有数字)。除了下划线外,它的名称不能含有任何标点或特殊符号。 2. 所有初级变量类型 · boolean : 真或假 · char : 一个字母, ‘ a ’ ,‘b ’ ,‘c ’ , 等等. · byte : 一个小的数字, –128 ~ 127 · short : 一个更大的数字, –32768 ~ 32767 · int : 一个大的数字, –2147483648…

Processing:互动

1. setup()里的内容仅执行一次,而后跳到draw(),draw()里的内容无限循环运行,直到你设置它停或手动让其停止。 2. setup()里的内容最先运行,size()应当始终作为setup()里的第一行,因为这是pr的习惯。。 3. mouseX和mouseY是两个关键值,你可以暂时将它们用做目前的变量。用它们代替一些值试试,会有好玩的互动。 4. pmouseX, pmouseY:鼠标的上一个坐标值。 5. 将值放到abs()中将得到它的绝对值(absolute value)。因此,鼠标移动速度的绝对值就是abs( mouseX – pmouseX ) 。 6. mousePressed() :鼠标按下;keyPressed():键盘按键按下。对应的,你不能让这个动作无限循环执行下去,因此,你需要写第三堆代码,例子如下: void setup() { size(200,200); background(255); } // 本例中,draw()内不发生任何事 void draw() { } // 无论何时用户点击鼠标,mousePressed()内的代码被执行 void mousePressed() { stroke(0); fill(175); rectMode(CENTER);…

Processing: Processing

1. 全屏运行Processing:Sketch -> Present,或者shift+鼠标单击run。Present不会改变你萤幕的分辨率,所以如果你想让sketch覆盖整个萤幕,你需将size()设为你萤幕的分辨率。 2. Processing草图文件名不允许空格和连字符,同时,也不能以数字作为开始。 3. 如果代码里有很多错误,pr只会提示你第一个错误,你将之改正后,又继续后边的错误提示。写到这,Shiffman老头这里说了一句颇有哲理的话:因为每次只需要看一个错误,我们的生活因此变得更加简单。 4. Processing现在只有在线参考,而没有离线参考,这点有点不爽,意味着我没网的话就看不了参考了。双击sketch里任意一个关键词,选择Help -> Find in Reference。 5. 导出后,将applet文件夹那一堆传到你的服务器空间里,就可以通过你的域名你在很多pr例网上看到的那个样子。由于这属于网页设计的范畴,这里就不赘述了。

Processing:像素

1. 计算机萤幕左上角坐标为0,0,横向为x、纵向为y轴。 2. 画矩形有三种方式:i. CORNER: rect(左上x, 左上y, 宽, 高);ii. CENTER: rect(中心x, 中心y, 宽, 高);iii. CORNERS: rect(左上x, 左上y, 右下x, 右下y)。画椭圆(ellipse)也是用同样的思路。看起来很难记比较容易混淆,但是只要记住有中心的就是center,出现一个角的坐标值的是corner,出现两个角的坐标值的就是复数,所以是corners。 3. 写ellipseMode的时候我发现processing的代码严格区分大小写,大小写不对狗日不认,完全不认。 4. 边框stroke()和填充fill()要写在被填色物的形状代码之前。背景色background()要写在他们所有之前。要除去边框和填充应当使用noStroke()和noFill()命令。而不要在括号里使用0,记住这里的0不是“没有”的意思,而是代表黑色。另外,注意不要同时使用noStroke()和noFill(),因为这样将什么也不会出现。 5. 从教材里的两个例子我发现一点,如果不指定rectMode的话,默认的模式是CORNER–rect(左上x, 左上y, 宽, 高)。而ellipse默认的则是CENTER–ellipse(中心x, 中心y, 宽, 高)。 6. Processing按由上往下、承上启下的方式执行代码。所以很多属性,如果是之前写过的,你就没必要在之后再重写了。 7. 如果你在点击run后,修改了代码想要再看效果,不用关闭之前运行的窗口,或者点击stop后再run,直接点run即可。 8. fill()的第四位引数代表它的透明度(前三位为RGB数值),和颜色一样,值255代表100%不透明,191则代表75%不透明,这个值越小,则透明度越高。 9. 原来颜色除了RGB,还有个HSB(色调、饱和度、亮度)可供表述。。。colorMode()可以在这两者间切换,并将它们的范围用第二引数的方式重新设定。

Max:手势捕捉

1. 鸟瞰一下手痒一下,再结合标题,就可以知道这是一个可以捕捉鼠标手势的程序。不过看到key和sel物件的搭配便可知,我们可以用键盘按键来控制它。32, 114和112分别是空格、r和p的ASCII码,空格清除画布内容,r开始记录鼠标手势(再按一次则停止记录),p开始回放(再按一次则停止回放)。 2. 这种记录不仅能记录你绘制的东西,还能记录你鼠标实际的运动包括时间,并将这一切重放。 3. 整个程序共有3个coll物件,但他们都共享同样的数据—thegest。双击它,可以看到它所记录的数据(每记录一次,里边的数据便更新一次,当然)。它以20毫秒的间隔抓取我们的运动。 4. 录制部分:选中toggel开启trigger物件(复习一下:其中引数i为int的缩写),trigger俩口,左边设定metro为20毫秒进入WTHITM,意为以20毫秒的“采样率”捕捉鼠标行为。另外,metro还进入了int物件(缩写为i)。WTHITM提取scale出的两个值进入一个名为draw的子patch(bucket物件的作用是什么?自己看看它的help档)后在lcd物件上绘制出图案。 5. int和+物件,作用简单来说,就是一个没有时间上限的计时器(counter)。它可以给你鼠标行为记录的时间。这个值,以及WTHITM的两个值被pack后一起送入coll物件,第一个值是时间轴,后两个值是鼠标X、Y的位置,这三个值以20毫秒的间隔被coll物件记录,这里,coll物件其实是充当了一个数据记录的角色。 6. 为什么每次点击record(或者按r键)后,lcd面板内的图像都会被清除掉呢?这里我认为sel 1下边那个trigger用得很妙,每次点击,都会有两个clear命令通过t物件被分别送入lcd(s lcd)和coll物件内,因此没次点击,都会清空(及重写)lcd以及coll里边的内容。另外两个0分别被送入绿色的toggle物件(PLAY)及int物件,关闭绿色toggle(停止任何回放),并将计时器清零。当收到一个bang猴,trigger物件从右至左输出它的引数,更多内容请自行参阅它的help档。 7. 回放部分:原理同录制部分,而且更简单。有一点有意思,就是你可以改变这部分metro的快慢,以实现快进或慢放的效果。 8. 深蓝框的coll物件是告诉我们,我们可以依此让coll读取(read)外部的文档或者将它的记录存储(write)到外部以供以后使用。它存储的文档为普通的txt文件,可以用任何相关软件打开或编辑。 本里内关键物件: coll:保存并编辑一个不同消息的集合。 疑问: 每次回放,都会有一个填充为黑色的三角形(如图),每次位置大小都不一样,不知道为什么,也不知道是不是这个例子的bug,有知情者谢谢告知。