ракета пролетела всю длину экрана и вышла за пределы экрана(тут мой скрипт при помощи splice удаляет ракету из массива ракет)
Не удаляет. Нет у вас там кода, который такое делает. Есть код отвечающий за перемещение - с проверкой достижения границы экрана, и никакой ветки else, в которой и должно происходить удаление, там нет. Есть удаление ракеты при столкновении с кораблём. Удаления при выходе за границы экрана нет. Нет его. НЕ-ТУ.
А уж splice внутри forEach - за такое не грех и руки оборвать.
Проверяем, не вышла ли ракета за границы элемента (левую сравниваем с горизонтальной координатой, правую с суммой горизонтальной координаты и ширины), если да - удаляем, нет - двигаем:
this.rockets.length -= this.rockets.reduce((acc, n, i, a) => {
a[i - acc] = n;
if (n.type === 'right' && this._isCollideFlyLeft(n)) {
this.flyLeft.energy -= 10;
} else if (n.type === 'left' && this._isCollideFlyRight(n)) {
this.flyRight.energy -= 10;
} else if (0 < n.xCoord && n.xCoord + n.width < this.fieldEl.offsetWidth) {
n.move();
return acc;
}
return acc + 1;
}, 0);