物理学
这是 Phaser 游戏开发教程的 16 个步骤中的 **第 5 步**。您可以在 Gamedev Phaser 教程 中找到完成本课后代码应有的样子,请访问 Gamedev-Phaser-Content-Kit/demos/lesson05.html。
为了在我们游戏中实现对象之间的正确碰撞检测,我们需要使用物理引擎;本文将向您介绍 Phaser 中可用的功能,并演示一个典型的简单设置。
添加物理
Phaser 附带了三种不同的物理引擎——Arcade Physics、P2 和 Ninja Physics——以及第四种选择 Box2D,作为商业插件提供。对于像我们这样的简单游戏,我们可以使用 Arcade Physics 引擎。我们不需要任何繁重的几何计算——毕竟它只是一个球弹在墙壁和砖块上。
首先,让我们在游戏中初始化 Arcade Physics 引擎。在 create
函数的开头添加 physics.startSystem()
方法(将其作为函数内的第一行),如下所示
js
game.physics.startSystem(Phaser.Physics.ARCADE);
接下来,我们需要为物理系统启用球体——Phaser 对象物理默认情况下未启用。在 create()
函数底部添加以下行
js
game.physics.enable(ball, Phaser.Physics.ARCADE);
接下来,如果我们想在屏幕上移动球体,可以在其 body
上设置 velocity
。再次在 create()
函数底部添加以下行
js
ball.body.velocity.set(150, 150);
移除我们之前的更新说明
请记住,从 update()
函数中删除我们之前添加 x
和 y
值的方法
js
function update() {
ball.x += 1;
ball.y += 1;
}
我们现在正在使用物理引擎正确处理它。
最终代码检查
最新的代码应如下所示
js
let 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
——球体现在应该沿给定方向持续移动。目前,物理引擎的重力和摩擦力都设置为零。添加重力会导致球体向下落,而摩擦力最终会使球体停止。
物理乐趣
比较您的代码
您可以在下面的实时演示中查看本课的完成代码,并进行体验以更好地理解其工作原理