本篇文章是 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)

一旦你設置好了物理對象,就可以開始處理碰撞了。