2 回答

TA貢獻1827條經(jīng)驗 獲得超9個贊
我可以看到你已經(jīng)準確地實現(xiàn)了 setInterval() 方法,并且根據(jù)你組織代碼的方式,你得到的結(jié)果是相當公平的,因為你的 addBubbles() 方法是在 FOR 循環(huán)有機會執(zhí)行之前執(zhí)行的開始,這就是為什么你會一次得到 10 個氣泡。我建議你像這樣在循環(huán)中拋出 addBubbles() 方法:
for (let i = 0; i < n; i++) {
addBubbles();
}
這樣,您的 addBubbles() 方法將隨著增量每 3000 毫秒執(zhí)行一次。

TA貢獻1856條經(jīng)驗 獲得超17個贊
您的代碼中存在一些問題。
問題 1: 每次繪制畫布時,都會開始 10 個間隔。這些間隔中的每一個都將每 3 秒運行一次函數(shù)。這會很快(并且成倍地)給你很多泡沫。
要每 3 秒添加 1 個氣泡,您只需啟動 1 個間隔。您可以在您的setup函數(shù)中執(zhí)行此操作,因為它只被調(diào)用一次。
您可以在addBubble函數(shù)中添加一個檢查,一旦您有一定數(shù)量的氣泡,它將取消間隔。
問題 2: 在調(diào)用setInterval().
您已bubbles.push(b)作為每 3 秒運行一次的函數(shù)傳遞。bubbles.push(b)不返回函數(shù)類型。
bubbles.push我們將傳遞一個向數(shù)組添加氣泡的函數(shù),而不是傳遞 的返回值。
問題 3:n在繪制畫布時,您 只需要迭代(10) 個氣泡。相反,您需要遍歷所有這些。
let bubbles = [];
let maxBubbles = 10;
let interval;
funtion setup() {
createCanvas(600, 400);
interval = setInterval(addBubble, 3000);
}
function addBubble() {
let x = random(50, 550);
let y = random(50, 350);
let r = random(10, 50);
let b = new Bubble(x, y, r);
bubbles.push(b);
if (bubbles.length >= maxBubbles) {
clearInterval(interval);
}
}
function draw() {
background(0);
for (let bubble of bubbles) {
bubble.show();
bubble.move();
}
}
添加回答
舉報