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

Processing鼠标点击刷新生成新随机网格图案问题求助

问题分析与修复方案

你的代码存在两个核心问题导致鼠标点击不生效:

1. 未声明二维数组 blk

代码中直接使用blk[i][j]但未提前声明,会导致程序运行报错,后续逻辑无法执行,需要在代码最顶部添加数组声明。

2. mousePressed 函数为空且缺少重绘触发逻辑

draw() 函数中调用了 noLoop(),程序仅在启动时运行一次draw就停止循环。点击鼠标时需要主动触发重绘,才能生成新的随机图案。


修正后的完整代码

// 声明Block类型的二维数组
Block[][] blk = new Block[8][8];

void setup(){
  size(400,400);
  for (int i=0; i<8; i++){
    for (int j=0; j<8; j++){
      blk[i][j]= new Block(i*50,j*50);
    }
  }
}

void draw(){
  background(255);
  for (int i=0; i<8; i++){
    for (int j=0; j<8; j++){
      float num = random(0,5);
      if (int(num)<3){
        blk[i][j].tile();
        blk[i][j].line1();  
      }
      else {
        blk[i][j].tile();
        blk[i][j].line2();  
      }         
    }
  }
  noLoop();
}

void mousePressed(){
  // 强制触发一次draw()重绘,生成新图案
  redraw();
}

// Class
class Block{
  float x,y;
  
  Block(float _x, float _y){
    x=_x;
    y=_y;
  }
  
  void tile(){
    stroke(0);
    strokeWeight(2);
    square(x,y,50);
  }
  
  void line1(){
    stroke(0);
    strokeWeight(2);
    line(x,y,x+50,y+50);
  }
  
  void line2(){
    stroke(0);
    strokeWeight(2);
    line(x+50,y,x,y+50);
  }
}

关键修改说明

  • 添加Block[][] blk = new Block[8][8];:提前初始化二维数组,避免运行时数组未定义的错误。
  • 在mousePressed()中添加redraw();:该函数会强制调用一次draw(),重新生成随机图案并绘制,同时保留noLoop()让程序在重绘后回到停止状态,避免不必要的循环消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:41:06