ETH官方钱包

前往
大廳
主題

【RM教學 2.0】MZ腳本 - 初始化篇

粽子 | 2021-11-22 17:32:20 | 巴幣 104 | 人氣 424

原文連結



上一篇我們用 SceneManager.run(Scene_Boot) 做為結尾。


這邊再次說明下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.addticker.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 提供的基本功能,以上
送禮物贊助創作者 !
0
留言

創作回應

給貓金幣
竟然有js 太神辣大大
2021-11-22 18:39:55

更多創作