本篇文章是 Phaser 系列的一部分。點擊這裡查看系列的第一篇文章。
Phaser 提供了三種不同的內建物理引擎:
- Arcade 物理引擎
- Matter.js
- Impact (相容 Impact.js)
Arcade 物理引擎是其中最簡單的一種,現在我們就來介紹它。
在 Phaser.Game
初始化配置物件中,通過添加 physics
屬性來啟用 Arcade 物理引擎:
const config = {
//...
physics: {
default: 'arcade',
arcade: {
debug: false
}
}
}
你可以將物理引擎添加到一個單獨的遊戲對象中,如下所示:
const dog = this.physics.add.sprite(20, 20, 'dog')
你也可以創建一個物理組。
組對於設置一組物件的共同規則非常有用。
我們有兩種類型的組: 靜態組和動態組。靜態組包含不會移動的元素,例如平台遊戲中的地面:
//在 preload() 方法中
this.load.image('ground', 'assets/platform.png')
//在 create() 方法中
const platforms = this.physics.add.staticGroup()
const ground = this.add.sprite(200, 200, 'ground')
platforms.add(ground)
注意: 可以從 https://github.com/photonstorm/phaser3-examples/tree/master/public/assets 下載該資源。
動態組包含可以移動的元素,並且具有速度和速度的屬性:
const dogs = this.physics.add.group()
你可以使用 items.add()
方法將物件添加到組中:
const dogs = this.physics.add.group()
const dog = this.add.sprite(20, 20, 'dog')
dogs.add(dog)
組還提供了一個方便的 create()
方法,可以用來自動創建遊戲對象:
platforms.create(200, 200, 'ground')
//相較於
const ground = this.add.sprite(200, 200, 'ground')
platforms.add(ground)
一旦你設置好了物理對象,就可以開始處理碰撞了。