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
相关产品推荐
相关产品推荐

