You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:15:50