p5.js

给艺术家的入门神器

程序基本结构


// 初始化,只在程序开始运行的时候执行一次
function preload(){
  // img = loadImage(imageFilePath);
  // snd = loadSound(soundFilePath);
}

// 初始化,只在程序开始运行的时候执行一次
function setup(){
  // createCanvas(width, height);
  //width代表画布宽度,height代表画布高度
}

//在初始化之后一直循环执行
function draw(){
	//渲染循环
}
				

系统变量


windowWidth / windowHeight
//窗口的高度和宽度
width / height
//当前画布的高度和宽度
frameCount
//程序开始运行到现在经过的帧数
mouseX / mouseY
//当前鼠标的X坐标和Y坐标
key
//上一个按下的键盘键值
keyCode
// 按下的特殊按键,如: BACKSPACE, DELETE,
// ENTER, TAB, ESCAPE, SHIFT, CONTROL, OPTION, ALT,
// UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW
				

系统事件


// 按键按下
function keyPressed(){
}
// 鼠标移动
function mouseMoved(){
}
// 鼠标按下
function mousePressed(){
}
// 鼠标点击
function mouseClicked(){
}
// 窗口大小改变
function windowResized(){
  // resizeCanvas(windowWidth, windowHeight);
}
				

2d 空间

  • 网格系统

  • 弧度制


push(); // 保存当前的样式和画布变换
  translate(xDisplace, yDisplace);
  scale(xFactor, yFactor);
  rotate(angle);
pop(); //  恢复保存的样式和画布变换

angleMode(DEGREES);  //默认:弧度制
			

颜色


background(color);  // 填充背景

fill(color);  // 设置填充色
noFill();  // 取消填充
stroke(color);  // 设置描边颜色
noStroke();  // 取消描边

fill('red');  // 颜色名称
fill('#222222');  // 6位十六进制数
fill(gray);
fill(gray, alpha);
fill(red, green, blue);
fill(red, green, blue, alpha);

colorMode(HSL, maxH, maxS, maxL, maxA);
fill(hue, saturation, lightness, alpha);

colorMode(HSB, maxH, maxS, maxB, maxA);
fill(hue, saturation, brightness, alpha);

colorMode(RGB, 255);  // 恢复默认颜色模式

colorVariable = color(120, 50, 90);
			

色相, 饱和度, 亮度

基础形状


ellipseMode(CORNER);  // 默认: 中心
rectMode(CENTER); // 默认: 左上角

strokeWeight(weight);
// 设置描边宽度

line(x1, y1, x2, y2);

ellipse(x, y, width, height);

rect(x, y, width, height);

arc(x, y, width, height, start, stop);

beginShape();
  vertex(x1, y1);
  vertex(x2, y2);
  vertex(x3, y3);
  //添加更多的顶点
endShape(CLOSE);
			

文本


font = loadFont(filePath);
// 加载TTF或者OTF格式的字体

textFont(font, size);
// 设置字体字号

textSize(size);
// 设置字号

textAlign(horizontal, vertical);
// 水平: LEFT (默认), CENTER or RIGHT
// 垂直: TOP, BOTTOM, CENTER or BASELINE (默认)

text("string", x, y);
text("multiline string", x, y, boxwidth, boxheight);
			
  • line() 直线

  • ellipse() 圆

  • rect() 矩形

  • arc() 扇形

  • vertex() 顶点

  • text() 文本

调试输出


print("string: " + variable);
// 在调试控制台上输出

// 双斜杠表示注释内容
			

数学


+ - / *  //基本运算符

random(low, high); //生成随机数
noise(x, y, z); //生成0到1之间的柏林噪音(平滑连续随机数)

round(value); //取最接近的整数

map(value, in1, in2, out1, out2);
//把一个值从一个范围内映射到另一个范围。

dist(x1, y1, x2, y2);
//计算两点之间的距离
			

if/then 逻辑

if(条件){
	语句
}

===  //等于
!=  //不等于
>   //大于
<   //小于
>=  //大于等于
<=  //小于等于

&&  //逻辑与
||  //逻辑或//逻辑非

for 循环


for ( init; test; update ) {
  statements
}

//示例
for (var i = 0; i < 10; i++) {
  print(i);
}