yangfanconan 发表于 2013-5-7 21:39:32

Processing之旅-----【2课Processing的基本结构】

本帖最后由 迷你强 于 2016-12-14 16:21 编辑

上课!
这节课我们主要讲述Processing的基本结构。


void setup()//初始化函数
{

}
void draw()//周期回调函数
{

}
void functionname()//自定义函数
{
      
}
void mousePressed()//鼠标事件函数
{

}
void keyPressed()//键盘事件函数
{

}
public classcustomeClassName()//自定义类
      //--------------------------------------
      //CONSTRUCTOR
      //--------------------------------------
      
      publiccustomeClassName()
         {
                // expression
      }
}
以上代码基本上蕴含了Processing的基本程序结构
那么我们进行详细的了解
void setup()函数的功能有些类似其他语言的main函数,说白了就是整个程序最先执行void setup()。当执行完void setup()函数后,再执行void draw()函数。
当然了说道基本结构不得不提的就是Processing可以什么都没有,直接写语句,就像一个草稿一样你让Processing做什么,它就做什么。比如著名的《getting start for Processing》中第一个例子。
ellipse(50, 50, 80, 80);
这个语句你会看到的效果是。

这个程序并没有通过用户来设置窗口大小。但你会发现。如果你什么函数都不写,那么这些程序在一般状态下都只会执行一次。(就算你用死循环它也只执行一次)
为了让同学们更好的理解Processing的基本结构。请尝试执行以下代码。

void setup()//初始化函数
{
      size(512, 512);//设置窗口大小
      println("Hello,Processing!");
}
void draw()//周期回调函数
{
      println("I Love Processing!");
}




可能有的同学以为应该下课了。哈哈,我会告诉你们还要接着讲,是不是很失望~
对于自定义函数事件,和自定义类我们放到以后的课程中进行详细的讲解。
对于void mousePressed()//鼠标事件函数和 void keyPressed()//键盘事件函数,我想说这是一个很重要的函数。因为在Processing中它负责对鼠标事件进行响应。如果同学们看过一些操作系统的书籍,会明白,在程序上用什么方法监听系统事件都是十分低效率的。所以操作系统会采用回调的方式。Callback。来将一些事件如鼠标事件,键盘事件等发送给响应的程序进行处理。

/**
* 鼠标事件函数
*
* Click on the box and drag it across the screen.
*/

float bx;//定义一个浮点数类型变量
float by;//定义一个浮点数类型变量
int boxSize = 75;//定义一个整形的变量
boolean overBox = false;//定义一个布尔型的变量 是否在方块上
boolean locked = false;//定义一个布尔型的变量是否点击了鼠标
float xOffset = 0.0; //定义一个浮点数类型变量
float yOffset = 0.0; //定义一个浮点数类型变量

void setup() //进行一些初始化操作,只执行一次。
{
size(640, 360);//设置窗口大小size(width,height)
bx = width/2.0;//在Processing中width是一个系统默认的变量,在size函数中设置;如果没有调用size函数则width默认为100
by = height/2.0;//在Processing中height也是一个系统默认的变量,在size函数中设置;如果没有调用size函数则height默认为100
rectMode(RADIUS); //rectMode(参数),其中参数有四种 CORNER, CORNERS, CENTER, RADIUS;此函数主要作用是改变rect函数的绘画效果。
}

void draw() //绘画函数,可以简单理解成一个死循环。while(1)这种。
{
background(0);//设置背景颜色。

// 测试光标是否在方块中
if (mouseX > bx-boxSize && mouseX < bx+boxSize &&
      mouseY > by-boxSize && mouseY < by+boxSize) {
    overBox = true;
    if(!locked) {
      stroke(255);
      fill(153);
    }
} else {
    stroke(153);
    fill(153);
    overBox = false;
}

// 画一个方块
rect(bx, by, boxSize, boxSize);
}

void mousePressed() {//点击鼠标事件
if(overBox) {
    locked = true;
    fill(255, 255, 255);
} else {
    locked = false;
}
xOffset = mouseX-bx;
yOffset = mouseY-by;

}

void mouseDragged() {//鼠标拖拽事件
if(locked) {
    bx = mouseX-xOffset;
    by = mouseY-yOffset;
}
}

void mouseReleased() {//释放鼠标事件
locked = false;
}


同学们自己运行一下。看看效果。很容易理解。如果程序中没有注释的部分则是以后会讲到的内容。不用着急。放松点。后面会更开心。

那么这节课就讲到这里。下课。{:soso__13766225770624999893_3:}

bacon6581 发表于 2013-5-7 22:05:18

{:soso__10594509353080808576_5:}

小猪会轮滑 发表于 2013-5-7 22:28:17

:lol:lol:lol:lol支持

yangfanconan 发表于 2013-5-8 07:44:37

bacon6581 发表于 2013-5-7 22:05 static/image/common/back.gif


谢谢支持啊~:lol

yangfanconan 发表于 2013-5-8 07:45:04

小猪会轮滑 发表于 2013-5-7 22:28 static/image/common/back.gif
支持

谢谢支持啊~:lol

caodingguang 发表于 2013-5-8 09:13:34

前来支持、、、、、、、:lol

yangfanconan 发表于 2013-5-8 09:36:54

caodingguang 发表于 2013-5-8 09:13 static/image/common/back.gif
前来支持、、、、、、、

谢谢支持啊~:lol

wisology 发表于 2013-5-10 21:55:34

鼠标和窗口的坐标是怎么定义的?期待下一课。

iiixxxiii 发表于 2013-8-5 00:07:04

问下:为啥我编辑器里中文是乱码?:L

海水小丑 发表于 2013-9-7 17:51:45

版主 强 支持,继续学习中

poorcoder 发表于 2013-12-29 14:38:59

楼主辛苦了,菜鸟来学习了

do335maomao 发表于 2015-2-26 11:46:58

顶楼主,很好的教程

Qiu_SaMa 发表于 2017-6-2 00:56:21

大赞,学习了,刚开始学,决定跟着一课一课的学下去了。支持!!!!

iceanthony 发表于 2017-7-25 13:07:48

感謝樓主的教導啊!!剛好正在學習processing哩

CrazyMar10 发表于 2017-9-12 15:06:46

哇,很棒的教程,在等面条的时间看了一遍,有所收获,谢谢楼主
页: [1]
查看完整版本: Processing之旅-----【2课Processing的基本结构】