遊戲結束

這是 Gamedev Phaser 教程第 8 步,總共 16 步。為了讓遊戲更有趣,我們可以引入失敗機制——如果你在球觸碰到螢幕底部邊緣之前沒有擊中它,遊戲就會結束。

如何輸掉遊戲

為了提供失敗機制,我們將停用球與螢幕底部邊緣的碰撞。將以下程式碼新增到 create() 方法中,放在最上面:

js
this.physics.world.checkCollision.down = false;

這將使三個邊界(頂部、左側和右側)反彈球,但第四個邊界(底部)將消失,讓球在擋板錯過時掉出螢幕。我們需要一種方法來檢測這種情況並採取相應行動。在 update() 方法的末尾新增以下行:

js
const ballIsOutOfBounds = !Phaser.Geom.Rectangle.Overlaps(
  this.physics.world.bounds,
  this.ball.getBounds(),
);
if (ballIsOutOfBounds) {
  // Game over logic
  alert("Game over!");
  location.reload();
}

新增這些行後,將檢查球是否超出了世界(在本例中是畫布)的邊界,然後顯示一個警告框。當你點擊出現的警告框時,頁面將重新載入,讓你重新開始遊戲。

注意:這裡的使用者體驗非常粗糙,因為 alert() 顯示一個系統對話方塊並阻塞了遊戲。在一個真正的遊戲中,你可能希望使用 <dialog> 設計自己的模態對話方塊。

此外,我們稍後還會新增一個 “開始”按鈕,但在這裡,遊戲會在頁面載入時立即開始,所以你可能在開始玩遊戲之前就“輸了”。為了避免煩人的對話方塊,我們將暫時移除 alert() 呼叫。

Compare your code

這是您到目前為止應該看到的效果,即時執行。要檢視其原始碼,請單擊“播放”按鈕。

後續步驟

現在基礎的遊戲玩法已經就緒,讓我們透過引入可摧毀的磚塊來讓遊戲更有趣——是時候 構建磚塊區域 了。