Collision detection

这是Gamedev Phaser 教程 (en-US) 16 的第 10 步。你可以在Gamedev-Phaser-Content-Kit / demos / lesson10.html完成本课程后找到源代码。

现在接下来的挑战 - 球和砖块之间的碰撞检测。幸运的是,我们可以使用物理引擎来检查单个对象(如球和桨)之间的碰撞,也可以检测对象和组之间的碰撞。

砖/球碰撞检测

物理引擎使一切都变得更容易 - 我们只需要添加两个简单的代码。首先,在你的update()函数中添加一行,检查球和砖之间的碰撞检测,如下所示:

js
function update() {
  game.physics.arcade.collide(ball, paddle);
  game.physics.arcade.collide(ball, bricks, ballHitBrick);
  paddle.x = game.input.x || game.world.width * 0.5;
}

球的位置是根据组中所有砖的位置计算的。第三个可选参数是发生冲突时执行的功能ballHitBrick()。创建这个新功能作为代码的底部,就在结束</script>标签之前,如下所示:

js
function ballHitBrick(ball, brick) {
  brick.kill();
}

就是这样!重新加载你的代码,你应该看到新的碰撞检测工作正常。

感谢 Phaser,有两个参数传递给函数 - 第一个是球,我们在碰撞方法中明确定义,第二个是球碰撞的砖组中的单个砖。在功能内部,我们从屏幕上删除所讨论的砖块,只需运行其kill()上的方法即可。

你将期望在使用纯 JavaScript (en-US)时编写更多自己的计算机来实现碰撞检测。这是使用框架的好处 - 你可以为 Phaser 留下大量无聊的代码,并专注于制作游戏中最有趣和最有趣的部分。

比较你的代码

你可以在下面的现场演示中查看本课程的完成代码,并使用它来更好地了解它的工作原理:

下一步

我们可以打砖块并删除它们,这已经是游戏的一个很好的补充。结果,更好地计算被毁砖增加得分 (en-US)