Javascript Phaser.js在forEach循环期间删除组中的对象

Javascript Phaser.js在forEach循环期间删除组中的对象,javascript,phaser-framework,Javascript,Phaser Framework,我想在某个对象通过某个x值后销毁它。 这些对象是称为“球”的相位器组的一部分。 在我的更新循环中,我有以下代码行: balls.forEach(updateBalls, null, true); 以下是updateBalls函数: function updateBalls(ball) { if (ball.x > 800) { ball.destroy(); } } 问题是,在循环过程中删除对象会弄乱循环,这是我得到的错误: TypeError:this.childre

我想在某个对象通过某个x值后销毁它。 这些对象是称为“球”的相位器组的一部分。 在我的更新循环中,我有以下代码行:

balls.forEach(updateBalls, null, true);
以下是updateBalls函数:

function updateBalls(ball) {
  if (ball.x > 800) {
    ball.destroy();
  }
}
问题是,在循环过程中删除对象会弄乱循环,这是我得到的错误:

TypeError:this.children[i]未定义

我试着把每个球推到一个阵列中,然后像这样摧毁每个球

function updateBalls(ball) {
  if (ball.x > 800) {
    ballsToDestroy.push(ball);
  }
}
然后在更新循环中:

balls.forEach(updateBalls, null, true);
for (x = 0; x < ballsToDestroy.length; balls++) {
    ballsToDestroy[x].destroy();
}
balls.forEach(updateBalls,null,true);
对于(x=0;x
但这给了我一些奇怪的错误。
如果我使用ball.kill(),它会起作用,但这最终会使游戏延迟,因为球实际上没有被移除


我该如何解决这个问题呢?

听起来像是Phaser中的一个愚蠢错误,如果在迭代过程中对组中的一个对象调用
destroy
时失败了

根据Phaser文档,一个组有一个返回。所以你可以得到一个
阵列设置
的要销毁的球:

var toDestroy = balls.filter(function(ball) { return ball.x <= 800; });
一应俱全:

balls.filter(function(ball) { return ball.x <= 800; }).callAll('destroy');

balls.filter(function(ball){return ball.x ball.x
“我试图将每个球推到一个数组中,然后在forEach循环后销毁该数组中的每个球,但没有成功。”证明这一点,它应该会起作用。好吧,我应该证明这一点。我的问题已经被你回答了,但我会告诉你我有什么。太好了!我只是从文档开始工作,没有使用Phaser.:-)但我很感兴趣,因为你的
forEach
看起来不像正常的
数组#forEach
,所以。。。
balls.filter(function(ball) { return ball.x <= 800; }).callAll('destroy');
balls.filter(ball => ball.x <= 800).callAll('destroy');