RPGMakerMV探秘19-自動執(zhí)行事件誕生記

????今天主要看下自動執(zhí)行事件的運(yùn)行大致過程。
????首先,事件是定義在地圖場景Scene_Map上,我們從“開始新游戲”開始一步步看該事件是怎么運(yùn)行的。

????commandNewGame命令通過數(shù)據(jù)管理器DataManager創(chuàng)建了很多游戲?qū)ο螅€進(jìn)行了一些基礎(chǔ)操作,選擇存檔文件、初始化隊伍、初始化位置、重置游戲時間等。

? ? 場景管理器Scene_Manager通過goto命令切換至Scene_Map。

????實際就是構(gòu)建了Scene_Map的一個實例賦值給this._nextScene。之前的文章我們已經(jīng)知道,Scene_Boot加載完后,將游戲控制權(quán)限基本交給了場景管理器,場景管理器通過requestAnimationFrame不停的執(zhí)行刷新操作。



????以上過程是update方法中比較核心的步奏,場景的切換及刷新都在上述代碼中完成。
????Scene_Map中幾個重要的方法的執(zhí)行順序如下:
????

????construct是構(gòu)造過程,在goto時執(zhí)行;create是創(chuàng)建過程,通過場景管理器控制執(zhí)行;isReady是start的一個條件方法,isReady表示資源的加載的情況,只有加載完成后,場景管理器才會調(diào)度執(zhí)行start方法。最后則是update過程。
????isReady中有兩個重要的步奏:


????圖一中的setupEvents方法,將event(事件)加載到地圖場景,圖二則創(chuàng)建了地圖場景上的顯示窗口。
????


????自動執(zhí)行事件的特性是自動執(zhí)行,不需要觸發(fā)命令,那么他應(yīng)該屬于interpreter。
????

????


????上面兩個步奏將event中自動執(zhí)行事件轉(zhuǎn)換成了Game_Interpreter,當(dāng)執(zhí)行Game_Interpreter的update時 :
????




????command101中對$gameMessage進(jìn)行了操作,而GameMessage便是游戲中對話框的信息對象:
????

????還記得上面有一個步奏是創(chuàng)建顯示窗口,這些窗口都是作為子對象(child)添加到地圖場景圖層上的,Scene_Base的update方法會遍歷刷新子圖層:
????

????而子圖層其中之一便是Window_Message

????上述過程便是我們在地圖上添加了自動執(zhí)行事件(文字顯示)后,如何一步步顯示的,當(dāng)然,其中的細(xì)節(jié)的變量變化沒有闡述出來,Scene_Map確實過于復(fù)雜。本文只分析一個大概的過程。