Processing 4实现按keyPressed()绘制3个递增尺寸圆形的问题求助
解决方案
你的核心问题是当前代码只维护了单个圆形的尺寸,每次按键仅修改这个尺寸并重新绘制单个圆,无法保留历史圆形。要实现需求,需要记录每次按键对应的圆形尺寸,并在绘制时逐个画出所有已生成的圆。
以下是两种实现方式,推荐第一种(更适合Processing新手):
方法一:使用布尔标记控制圆形绘制(无需集合)
这种方式通过布尔变量标记是否绘制对应圆形,逻辑直观,代码简单:
int pressCount = 0; final int INITIAL_SIZE = 70; final int FIRST_INCREASE = 10; final int SECOND_INCREASE = 3; // 标记是否绘制对应圆形 boolean drawCircle1 = false; boolean drawCircle2 = false; boolean drawCircle3 = false; // 预定义三个圆形的尺寸 int size1 = INITIAL_SIZE; int size2 = INITIAL_SIZE + FIRST_INCREASE; int size3 = INITIAL_SIZE + FIRST_INCREASE + SECOND_INCREASE; void setup() { size(500, 500); } void draw() { background(0); stroke(255, 0, 0); strokeWeight(25); fill(255); pushMatrix(); translate(20, 50); // 根据标记绘制对应圆形 if (drawCircle1) { circle(width/2, height/2, size1); } if (drawCircle2) { circle(width/2, height/2, size2); } if (drawCircle3) { circle(width/2, height/2, size3); } popMatrix(); } void keyPressed() { // 仅处理前三次按键 if (pressCount < 3) { pressCount++; switch(pressCount) { case 1: drawCircle1 = true; break; case 2: drawCircle2 = true; break; case 3: drawCircle3 = true; break; } } }
方法二:使用ArrayList存储圆形尺寸(适合扩展更多圆形)
如果后续需要支持更多圆形,使用集合存储尺寸会更灵活:
import java.util.ArrayList; ArrayList<Integer> circleSizes; int pressCount = 0; final int INITIAL_SIZE = 70; final int FIRST_INCREASE = 10; final int SECOND_INCREASE = 3; void setup() { size(500, 500); circleSizes = new ArrayList<Integer>(); } void draw() { background(0); stroke(255, 0, 0); strokeWeight(25); fill(255); pushMatrix(); translate(20, 50); // 遍历所有已存储的圆形尺寸,逐个绘制 for (int size : circleSizes) { circle(width/2, height/2, size); } popMatrix(); } void keyPressed() { if (pressCount < 3) { pressCount++; if (pressCount == 1) { circleSizes.add(INITIAL_SIZE); } else if (pressCount == 2) { circleSizes.add(INITIAL_SIZE + FIRST_INCREASE); } else if (pressCount == 3) { circleSizes.add(INITIAL_SIZE + FIRST_INCREASE + SECOND_INCREASE); } } }
关键改动说明
- 移除了原代码中单一的
initialSize变量,改为记录每个圆形的独立尺寸 - 通过
pressCount变量限制仅处理前三次按键 - 在
draw()函数中,不再只绘制单个圆,而是根据已标记的状态/存储的尺寸,逐个画出所有已生成的圆形(即使每次清屏,也会重新绘制所有历史圆,实现“保留”效果)
内容的提问来源于stack exchange,提问作者lunalilac
相关产品推荐
相关产品推荐

