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

Processing中如何用for循环替代条件判断实现球落地时逐次生成矩形?

解决小球落底逐次生成矩形的问题

我懂你想要的效果:小球每次掉出屏幕底部后,不是单纯重置位置,而是在屏幕左上角逐个生成相邻的矩形,而不是程序一启动就冒出一整排。你之前用嵌套for循环的问题在于,draw()函数每帧都会执行一次,那两个循环会一次性把所有矩形都画完,自然达不到逐次生成的效果。

咱们换个思路,用一个计数器来记录已经生成了多少个矩形,每次小球落地时只让计数器加1,然后根据计数器的数值来画对应数量的矩形就行。下面是完整的实现代码:

// 小球相关变量
float ballX = 260;
float ballY = 50;
float ballSpeed = 1;

// 矩形相关变量
int rectSize = 20;
int rectSpacing = 40;
int rectCount = 0; // 记录已生成的矩形数量

void setup() {
  size(512, 348);
}

void draw() {
  background(255);
  
  // 绘制并更新小球位置
  fill(0);
  ellipse(ballX, ballY, 15, 15);
  ballY += ballSpeed;
  
  // 判断小球是否触底
  if (ballY > height) {
    ballY = 0; // 重置小球位置
    rectCount++; // 每落地一次,矩形数量加1
  }
  
  // 根据已生成的数量绘制矩形
  fill(100); // 用灰色区分小球和矩形
  for (int i = 0; i < rectCount; i++) {
    float rectX = i * rectSpacing;
    // 确保矩形不超出屏幕宽度
    if (rectX + rectSize <= width) {
      rect(rectX, 20, rectSize, rectSize);
    }
  }
}

代码解释:

  • 新增了rectCount计数器,初始为0,每次小球掉出屏幕底部时,这个计数器就加1
  • 在draw()里,我们用一个for循环,根据rectCount的值来画对应数量的矩形,每个矩形的X坐标是i * rectSpacing,这样它们会从左到右依次排列,间距40
  • 加了一个判断rectX + rectSize <= width,防止矩形超出屏幕右侧边界
  • 给矩形用了灰色填充,方便和黑色小球区分开

这样运行起来,小球每落地一次,左上角就会多一个矩形,完全符合你想要的逐次生成的效果啦。

内容的提问来源于stack exchange,提问作者Utsav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:17:02