這邊再次說明下SceneManager的功能
遊戲中所有的場景包含 地圖/主菜單/Save/戰鬥畫面 都可以算是一個Scene,並且由SceneManager來管理
接下來的節奏會有點快,準備好就上車吧!
執行第一個Scene
SceneManager.run(Scene_Boot) 這邊初始化了部分內容,並執行了Scene_Boot這個Scene
接下來看到initialize 這個function , 目前比較重要的部分是 initGraphics
這邊不僅初始化了Graphics的內容,也設定了SceneManager.update 作為ticker的handler
因為 Graphics.initialize 裡面很重要,所以我們跟隨這個function 跳去rmmz_core裡面看看做了些什麼。
建立PIXI.Application
Graphics.initialize 裡面除了初始化基本參數之外,最重要的部分就是 _createPixiApp 這個部分
這裡才是建立我們繪圖引擎pixi.js 的重點部分
rpgmaker mv ~mz 都是使用pixi.js 作為繪圖引擎,你在遊戲中所有能看見的畫面都是透過pixi.js來進行繪圖
替換PIXI中的ticker
在 Graphics._createPixiApp 中還必須注意一個地方就是 ticker.add 跟 ticker.remove 的部分,在這裡替換掉了原本的渲染的ticker, 並改註冊自己的ticker 來進行update
根據pixijs 的源碼我們可以了解到,pixi的ticker 也是註冊web api中的requestAnimationFrame 來進行運作
Ticker中的運作
在看回SceneManager之前,還有最後一點需要我們關注一下
來看一下註冊的_onTicker 裡面跑的東西
可以看到除了呼叫 `_tickHandler` 後,再依照是否可以渲染( render() )來進行渲染動作
回到SceneManager
看完 Graphics.initialize 的東西後,再讓我們回到 SceneManager.initGraphics
Graphics.setTickHandler 在這裡註冊了 this.update ,並設定了 Graphics._onTick 中的 this._tickHandler(deltaTime);
所以每一幀更新時,都會呼叫到 `SceneManager.update` 這個function
而這個function 會呼叫到 updateMain , 一般來說每一幀只會呼叫到一次
再來稍微看下 updateMain 的作用
裡面比較重要的內容就是 changeScene跟updateScene
updateScene 中,有一個 this._scene.update
他串接了所有的scene class 的update, 把他註解掉之後,你的遊戲畫面就再也不會動了~
小結
這一段我們了解了,開始執行遊戲後的一些初始化內容
算是比較繁雜與跳躍,但我們可以簡單理解成
繪圖引擎pixi.js 綁定了SceneManager中的 update 來讓遊戲可以進行渲染/資料更新 等功能
這一篇大概到此就結束了,後面的章節開始講解一些class 提供的基本功能,以上