if 语句
前一小节所绘制的圆圈动画在移动到右侧边框外之后例不再显示,我们可通过 if 语句通过判断其超出范围再重新回到最左边开始移动。默认每秒显示的帧数为60,可通过提高其值来加快移动速度,也可提升横坐标上累加的值来加快速度。以下代码用于绘制一个绿色的移动较慢的圆圈,以及一个红色的移动较快的圆圈。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
float slow_circle_x = 0; float fast_circle_x = 0; void setup() { size(400, 400); noStroke(); //frameRate(1000); // 默认值为每秒60 } void draw() { background(#1BB1F5); fill(#C1FF3E); ellipse(slow_circle_x, 50, 50, 50); slow_circle_x = slow_circle_x + 1; fill(#FF4800); ellipse(fast_circle_x, 50, 50, 50); fast_circle_x = fast_circle_x + 5; if (slow_circle_x > 400) { slow_circle_x = 0; } if (fast_circle_x > 400) { fast_circle_x = 0; } } |
我们可以通过随机性来改变绿球的大小:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
float slow_circle_x = 0; float fast_circle_x = 0; void setup() { size(400, 400); noStroke(); //frameRate(1000); // 默认值为每秒60 } void draw() { background(#1BB1F5); float slow_circle_size = 50; if(random(10) > 8){ slow_circle_size = 60; } fill(#C1FF3E); ellipse(slow_circle_x, 50, slow_circle_size, slow_circle_size); slow_circle_x = slow_circle_x + 1; fill(#FF4800); ellipse(fast_circle_x, 50, 50, 50); fast_circle_x = fast_circle_x + 5; if (slow_circle_x > 400) { slow_circle_x = 0; } if (fast_circle_x > 400) { fast_circle_x = 0; } } |
对代码进行改造实现类似小球的反弹效果,这里我们使用了 width 和 height,分别表示画布的宽和高:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// 初始位置 float circle_x = 300; float circle_y = 20; // 每帧移动的距离 float move_x = 2; float move_y = -2; // 圆圈半径 float radius = 20; void setup() { size(400, 200); stroke(#D60DFF); strokeWeight(4); } void draw() { background(#21EA73); ellipse(circle_x, circle_y, radius*2, radius*2); circle_x = circle_x + move_x; circle_y = circle_y + move_y; if(circle_x < radius || circle_x > width-radius) { move_x = - move_x; } if(circle_y < radius || circle_y > height-radius) { move_y = - move_y; } } |
if语句语法
条件语句主要用于执行哪些行代码、不执行哪些行代码的决策控制,仅在满足具体条件(根据变量值)时执行某些操作。下图中展示了if语句的运行流程,其中 test 表达式的结果值为 true 或 false,在值为 true 时紧接着的花括号之间的语句才会执行。
从程序编译的角度,如果花括号中仅有一条语句,是可以省略掉这对花括号的,但不建议这么做,因为这会在修改代码时产生意料之外的结果,同时代码的易读性较差。花括号还能让我们清晰地了解变量的作用域,我们在程序顶部所定义的变量是全局变量,在全局均可使用,但花括号内定义的变量均为局部变量,作用域仅限花括号之内。
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
float slow_circle_x = 0; float fast_circle_x = 0; float x = 0.0; void setup() { size(100, 100); } void draw() { background(204); if (x < 40) { // 如果x 小于40,画一个小圆 ellipse(50, 50, 20, 20); } else if (x < 80) { // 如果 x 的值仍小于80时,画一个大圆 ellipse(50, 50, 60, 60); } else { // 如果 x 大于等于80时,画一个矩形 rect(20, 20, 60, 60); } line(x, 0, x, 100); x += 1; if (x > 100) { x = 0; } } |
if语句中 test 语句还包含每次逻辑判断语句,通过逻辑运算符进行连接,主要有逻辑与&&、逻辑或 || 以及逻辑非 !