Physics

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

为了在我们的游戏中的对象之间进行正确的碰撞检测,我们将需要物理学; 本文将向你介绍 Phaser 中的可用内容,以及演示典型的简单设置。

添加物理效果

Phaser 与三个不同的物理引擎(Arcade Physics,P2 和 Ninja Physics)捆绑在一起,第四个选项 Box2D 可作为商业插件使用。对于像我们这样的简单游戏,我们可以使用 Arcade Physics 引擎。我们不需要任何重的几何计算 - 毕竟只是一个球从墙壁和砖块弹起来。

首先,让我们在游戏中初始化 Arcade Physics 引擎。physics.startSystem()create函数开头添加方法(使其成为函数内的第一行),如下所示:

js
game.physics.startSystem(Phaser.Physics.ARCADE);

接下来,我们需要为物理系统启用我们的球 - 默认情况下,Phaser 对象物理不启用。在create()函数底部添加以下行:

js
game.physics.enable(ball, Phaser.Physics.ARCADE);

接下来,如果我们要在屏幕上移动我们的球,我们可以设置velocitybody。再次添加以下行create()

js
ball.body.velocity.set(150, 150);

删除我们以前的更新说明

记得删除添加值的我们的老方法x,并yupdate()功能:

js
function update() {
  ball.x += 1;
  ball.y += 1;
}

我们正在使用物理引擎正确处理。

最终代码检查

最新的代码应该如下所示:

js
var ball;

function preload() {
  game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
  game.scale.pageAlignHorizontally = true;
  game.scale.pageAlignVertically = true;
  game.stage.backgroundColor = "#eee";
  game.load.image("ball", "img/ball.png");
}

function create() {
  game.physics.startSystem(Phaser.Physics.ARCADE);
  ball = game.add.sprite(50, 50, "ball");
  game.physics.enable(ball, Phaser.Physics.ARCADE);
  ball.body.velocity.set(150, 150);
}

function update() {}

尝试重新加载index.html- 球应该在给定的方向上不断移动。目前,物理引擎的重力和摩擦力设定为零。增加重力将导致球落下,同时摩擦力最终会停止球。

物理效果趣味

你可以用物理学来做更多的事情,例如添加ball.body.gravity.y = 100;你将设置球的垂直重力。因此,它将向上发射,但是由于重力的作用而下降。

这种功能只是冰山一角 - 有各种功能和变量可以帮助你操纵物理对象。查看官方物理文档,并使用ArcadeP2物理系统查看大量示例。

比较你的代码

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

下一步

现在我们可以转到下一课,看看如何让球从墙上弹起