RPGMakerMV探秘10-地圖顯示角色信息
????????先上圖,今天要實(shí)現(xiàn)的效果如下: ????

????????今天的目的就是在地圖的左上角顯示角色(主角-隊(duì)伍第一)的主要屬性信息。
????????首先拆解一下,這塊信息都包含哪些元素:底層圖層、HP、MP、TP、EXP顯示條及數(shù)字、等級(jí)數(shù)字、角色名稱。像“生命”、“魔法”、“經(jīng)驗(yàn)”、“怒氣”、“等級(jí)”等中文字樣一般不會(huì)變動(dòng),那就可以直接畫在底層圖層上。基礎(chǔ)圖層如下:

????????那么我們需要做的就是將圖層及其他要素放在對(duì)應(yīng)的位置,并利用周期函數(shù)改變?cè)氐娘@示。
????????為了實(shí)現(xiàn)上述的效果,我們使用MOG_ActorHud.js插件。該插件出現(xiàn)了一些我們之前沒有提到過的一些對(duì)象,如Game_System、Game_BattlerBase?、Game_Actor、Game_CharacterBase、Game_Interpreter、Spriteset_Map等。以Game為前綴的對(duì)象定義在
rpg_objects.js中,Spriteset_Map定義在rpg_sprites.js中。rpg_objects.js中定義的對(duì)象是對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的抽象,Spriteset_Map是地圖場(chǎng)景上精靈的合集。
????????我們需要在地圖場(chǎng)景上添加一些展示信息(精靈),而這些信息背后的數(shù)據(jù)來(lái)源于各個(gè)對(duì)象上的屬性。所以這個(gè)插件便是對(duì)這些對(duì)象的重寫及改造。
????????插件中構(gòu)建了一個(gè)新的對(duì)象Actor_Hud,繼承自Sprite。然后信息展示所有的資源都是添加到Actor_Hud上的,做update也基于Actor_Hud。

????????Actor_Hud的構(gòu)造如上,加載資源、清理過程數(shù)據(jù)。? ?

????????你可能想知道Spriteset_Map是在什么時(shí)候調(diào)用createUpperLayer而創(chuàng)建了我們需要的Actor_Hud對(duì)象。那就得看一看rpg_sprites.js了,Spriteset_Map繼承自
Spriteset_Base,Spriteset_Base在初始化時(shí)調(diào)用了createUpperLayer方法,而我們的地圖場(chǎng)景Scene_Map在加載地圖元素時(shí)會(huì)創(chuàng)建Spriteset_Map。

????????接下來(lái)我們看下插件命令的定義:? ?

????????插件命令的定義在插件中是非常常見的部分,定義插件命令后,我們可以很方便的在RPGMakerMV的事件頁(yè)中調(diào)用插件命令。如上圖,“show_actor_hud”、“hide_actor_hud”便是兩個(gè)插件命令,在事件頁(yè)中添加“插件指令”,只需要復(fù)制對(duì)應(yīng)指令,條件觸發(fā)時(shí),便會(huì)執(zhí)行相應(yīng)的代碼。這里的隱藏和展示我們的角色屬性信息使用起來(lái)很方便,假如我們進(jìn)入劇情階段或者進(jìn)入安全區(qū)域,我們不想展現(xiàn)角色屬性信息,一個(gè)命令便可以隱藏起來(lái)。切換到其他場(chǎng)景時(shí),打開即可。
????????Actor_Hud的另一個(gè)核心便是update。插件代碼的大概2/3篇幅都是圍繞update的處理。?

????????update方法看起來(lái)只有幾行代碼,但是其調(diào)用的方法,一層套一層,涉及每一個(gè)sprite的處理。要完全梳理其邏輯及數(shù)據(jù)結(jié)構(gòu)還是比較吃力的。

????????你如果仔細(xì)去看了每一個(gè)精靈的update算法,你會(huì)發(fā)現(xiàn),類似顯示條、數(shù)字、名字、等級(jí)等信息的update、create與上一篇中我們提到的MOG_SceneMenu.js插件中的幾乎差不多。其實(shí)你可以理解為把菜單場(chǎng)景的角色狀態(tài)信息展示到了地圖場(chǎng)景,做了一些資源的改動(dòng)和微調(diào)。
????????注:以上分析均為作者興趣出發(fā),自學(xué)有感,對(duì)于js的認(rèn)知還存在不足或者偏差,如有錯(cuò)誤,歡迎指正。