主題

【RM教學 2.0】MZ腳本 - Scene 的開始

粽子 | 2021-11-23 17:57:33 | 巴幣 6 | 人氣 115

原文連結

上一篇我們我們說明了SceneManager的運作內容,這樣接下來的閱讀就會更容易了解,「為什麼可以這樣寫?」
承接上上篇,再次讓我們回到SceneManager.run(Scene_Boot) 這邊吧!


SceneManager.run(Scene_Boot)

透過這個function 我們要進入第一個遊戲畫面可以看到這邊使用了 this.goto(sceneClass)
跳到goto 這個function,將 this._nextScene 賦值成 new sceneClass() ,也就是上面提到的new Scene_Boot()並將this._scene(當前的scene) 進行stop接著來看到上一篇提到的 SceneManager.update中的 changeScene這邊是每一幀都會進行update的function,可以看到在 this._nextScene 有值的狀況下會執行create 進行切換scene。
直到下個frame的時候,就會對新的scene開始 進行update也就是說我們成功切換了Scene

Scene_Boot

接下來我們正式進入Scene_Boot的閱讀

Scene_Boot 是遊戲最早進入的Scene,主要負責載入基底會使用到的圖片,並解析存擋/初始化資料庫設定,載入完畢後才會讓遊戲進入Scene_Title (開頭選單)



首先看到 Scene_Boot 被賦值 Scene_Base的原型鍊(prototype),為了方便解說,後面類似的狀況都將直接說繼承,不理解js原型鏈的夥伴可能選要先去了了解下
在這邊我們著重看 create / isReady 以及start 這幾個在SceneManager切換Scene時會用到的method


create
在這裡呼叫了 DataManager.loadDatabase(); 將data 資料夾裡的json 檔案資料進行初始化另外也呼叫 StorageManager.updateForageKeys(); 來更新讀取存檔時會使用的key值
isReady
isReady 顧名思義,他可以用來判斷這個scene 要開始進行update 之前的資料是否已經處理完畢,若return false 則會繼續再SceneManager裡面執行到return true 才會繼續下個步驟
會這樣做,主要是許多初始化的資料必須採用異步讀取在進行初始化。
讓我們再回顧一下SceneManager中的updateScene在確定 this._scene.isReady之後,下一個frame就會進入 scene.start(). , 最後就會持續進行scene.update這樣是否串連起來了呢?
start
Scene_Boot 這個class 在載入基本資料後,基本上就完成了,可以看到在start 這個function 在一般狀況下我們會進入 startNormalGame 並前往玩家第一個看到的Scene_Title
Scene_Boot 除了資料載入外,其實也初始化了很多manager 以及預設字體等內容,但在這個階段,我們只先了解重點的流程部分即可


以上,下一節我們會看到Scene_Title 以及相關Window Class 的運作!

送禮物贊助創作者 !
0
留言

創作回應

更多創作