小遊戲開發 Mario (9)
上兩週主要給大家介紹了遊戲中是如何檢測遊戲角色和遊戲角色和障礙物間的碰撞。今天回到 mario 繼續寫我們 super mario 這款遊戲。
在開始新的內容之前,我們需要整理一下前面的程式碼。我們看圖中的 loadBackgroundSprites 和下面定義的 comp 物件都是應該屬於 level(關卡),因為他們都會關卡息息相關。關卡包含背景圖的組合(這裡所謂組合將許多層組合為背景展示給使用者)

建立 Level 類,Level 中我們將 compositor(圖層組合)遊戲角色集合 entities。

介紹一下 ES6提供了Set 資料結構。類似於陣列,但是沒有重複值。下面程式碼可以幫助大家理解 Set 資料結構。

回到主(main.js)函式,由於 comp 已經成為 Level 一個屬性,我們就可以刪除此行程式碼。

我們將與 Level 有關的程式碼移到 Level 類中來整合程式碼,已經類的概念,也就是面向物件程式設計的終極目標就是複用程式碼


在 loader.js 我們對 loadLevel 進行改動,改動力度很大,稍一說明。在讀取 json 和載入背景 sprite。兩個載入完成後,我們需要建立 Level 例項,這個例項提供 comp 和 entities 。我們現在就把 compositor 封裝到 Level 類中了。然後把 Mario 看作 Level 的 entities 集合中的一個。

切換到 layer.js 檔案中,進行一些調整,這裡內容顯然易見,就不做過多解釋了。

修改main.js 中程式碼,如下圖。




現在一切和調整程式碼之前一樣,除了沒有看到主角 mario,我們要看到 mario 就還需要一些工作,就是將 mario 新增到 entities 中。


我們把 mario 的 update 方法也移到 Level 這類中,這樣看起來就更合理,因為所有角色的都在 entities 這個集合中,所以可以 level 的 update 方法代替 mario(做一個 entity)他自己方法。然後在 level 的 update 方法中,我們遍歷 entities 然後呼叫每一個 entity 的 update 方法。


