Я пытаюсь создать программу, в которой частицы, сгенерированные на левом краю холста, удаляются из массива (используя сращивание), когда они достигают правого конца холста.
let P = [];
let n = 10;
function setup()
{
createCanvas(500,500);
for(let i = 0; i < n; i++)
P.push(new particle());
}
function draw()
{
background(0);
for(let i = 0; i < n; i++)
{
if(P[i].out == true)
{
P.splice(i, 1);
n--;
}
P[i].update();
P[i].plot();
console.log(P.length)
}
}
class particle
{
constructor()
{
this.brightness = 0;
this.vel = random(1);
this.dia = 3;
this.x = 0;
this.y = random(height);
this.out = false;
}
update()
{
this.x += this.vel;
if(this.x >= width)
this.out = true;
}
plot()
{
noStroke();
fill(255);
circle(this.x, this.y, this.dia);
}
}
Программа, кажется, работает нормально по большей части, когда она работает. Чтобы убедиться, что элементы в массиве действительно удаляются, я попытался записать длину массива. Когда я запускаю его, элементы удаляются, когда они достигают правого края холста, но когда размер массива уменьшается примерно до 30% или около того (каждый раз, когда я его запускаю, он меняется), я получаю эту ошибку:
Uncaught TypeError: Невозможно прочитать свойство 'update' с неопределенным значением
Я озадачен этим, потому что я не понимаю, как функция обновления не может быть прочитана, когда она имеет уже использовался несколько раз в l oop ранее.