保持 noLoop() 一段时间

Hold noLoop() for certain amount of time

我正在尝试创建一个非常简单的 "whack-a-mole" 类型的游戏,专为刚接触 p5.js 和一般处理的学生设计。 目前,我已经创建了一个数组,并在该数组中进行了随机搜索,随机选择一个正方形并将其变成棕色(目前为 "mole")。 如何使用基本 p5 使其在选择一个正方形后停留几秒钟,然后跳到下一个? 我已经设法实现了 noLoop(),它可以停止搜索,但在一定时间后我希望它恢复。

这是我目前的代码:

function setup() {
    createCanvas(610,610)
}

function draw() {
    var grid = []
    for (var x = 0; x < 6; x += 1){
        grid[x]=0;
        for (var y = 0; y < 6; y += 1){
            rand=round(random(360))
            grid[x][y]=0
            if (rand==0){
                grid[x]=1
                grid[y]=1
                noLoop()
            }
            if (grid[x]==0 || grid[y]==0){
                fill(76,153,0)
                rect((x*100+10),(y*100+10),90,90)
            }
            if (grid[x]>0 && grid[y]>0){
                fill(102,51,0)
                rect((x*100+10),(y*100+10),90,90)
            }
        }
    }
}

您可以保持每秒 60 帧的循环,而不是使用 noLoop(),然后使用 millis() 函数来跟踪经过的时间。

下面是一个在用户点击时显示一个圆圈 1 秒的示例:

var clickTime;

function mousePressed(){
  clickTime = millis();
}

function draw() {
  background(0);
  if(millis() < clickTime + 1000){
    ellipse(width/2, height/2, width/4, height/4);
  }
}

编辑: 另一种方法是使用 % 运算符和 frameCount 变量,以便每隔 X 帧执行一些操作。此示例每 60 帧在随机位置绘制一个圆圈:

function draw() {
  if (frameCount % 60 == 0) {
    background(0);
    ellipse(random(width), random(height), width / 4, height / 4);
  }
}