对Phaser js的组中的每个对象应用一个动作

And*_*ard 4 javascript phaser-framework

正如它所说,在Phaser.js中,如何为组内的每个对象应用一个动作.我想对每个项目应用以下行:

game.physics.arcade.collide(something, platforms);
game.physics.arcade.overlap(player, something, gameOver, null, this);
something.body.velocity.x = -120;
Run Code Online (Sandbox Code Playgroud)

"Something"是对象名称,但我的组名称为"obstacleGroup".我想这样做,因为我有另一个功能一直向组创建新对象,所以我不一定知道它们被称为什么.

Pho*_*orm 12

Group.forEach是你可以使用的一种这样的迭代方法(正如@imcg在我之前指出的那样).但是,您将其用于Arcade Physics碰撞,并且可以将Group作为参数.因此,您可以通过以下方式与群组中的所有内容进行冲突:

game.physics.arcade.collide(obstacleGroup, platforms);

一次,在你的更新循环中.

同样适用于overlap.


imc*_*mcg 9

您可以使用Group.forEach迭代组中的对象并在其上调用函数:

obstacleGroup.forEach(function(item) {
    game.physics.arcade.collide(item, platforms);
    game.physics.arcade.overlap(player, item, gameOver);
    item.body.velocity.x = -120;
}, this);
Run Code Online (Sandbox Code Playgroud)

  • @imcg 最新的移相器版本要求您将 `this` 作为第二个参数传递给 `forEach`。我更新了您的答案以包含此内容。 (2认同)