RPGMakerMV探秘10-地图显示角色信息
先上图,今天要实现的效果如下:

今天的目的就是在地图的左上角显示角色(主角-队伍第一)的主要属性信息。
首先拆解一下,这块信息都包含哪些元素:底层图层、HP、MP、TP、EXP显示条及数字、等级数字、角色名称。像“生命”、“魔法”、“经验”、“怒气”、“等级”等中文字样一般不会变动,那就可以直接画在底层图层上。基础图层如下:

那么我们需要做的就是将图层及其他要素放在对应的位置,并利用周期函数改变元素的显示。
为了实现上述的效果,我们使用MOG_ActorHud.js插件。该插件出现了一些我们之前没有提到过的一些对象,如Game_System、Game_BattlerBase 、Game_Actor、Game_CharacterBase、Game_Interpreter、Spriteset_Map等。以Game为前缀的对象定义在
rpg_objects.js中,Spriteset_Map定义在rpg_sprites.js中。rpg_objects.js中定义的对象是对数据库数据的抽象,Spriteset_Map是地图场景上精灵的合集。
我们需要在地图场景上添加一些展示信息(精灵),而这些信息背后的数据来源于各个对象上的属性。所以这个插件便是对这些对象的重写及改造。
插件中构建了一个新的对象Actor_Hud,继承自Sprite。然后信息展示所有的资源都是添加到Actor_Hud上的,做update也基于Actor_Hud。

Actor_Hud的构造如上,加载资源、清理过程数据。

你可能想知道Spriteset_Map是在什么时候调用createUpperLayer而创建了我们需要的Actor_Hud对象。那就得看一看rpg_sprites.js了,Spriteset_Map继承自
Spriteset_Base,Spriteset_Base在初始化时调用了createUpperLayer方法,而我们的地图场景Scene_Map在加载地图元素时会创建Spriteset_Map。

接下来我们看下插件命令的定义:

插件命令的定义在插件中是非常常见的部分,定义插件命令后,我们可以很方便的在RPGMakerMV的事件页中调用插件命令。如上图,“show_actor_hud”、“hide_actor_hud”便是两个插件命令,在事件页中添加“插件指令”,只需要复制对应指令,条件触发时,便会执行相应的代码。这里的隐藏和展示我们的角色属性信息使用起来很方便,假如我们进入剧情阶段或者进入安全区域,我们不想展现角色属性信息,一个命令便可以隐藏起来。切换到其他场景时,打开即可。
Actor_Hud的另一个核心便是update。插件代码的大概2/3篇幅都是围绕update的处理。

update方法看起来只有几行代码,但是其调用的方法,一层套一层,涉及每一个sprite的处理。要完全梳理其逻辑及数据结构还是比较吃力的。

你如果仔细去看了每一个精灵的update算法,你会发现,类似显示条、数字、名字、等级等信息的update、create与上一篇中我们提到的MOG_SceneMenu.js插件中的几乎差不多。其实你可以理解为把菜单场景的角色状态信息展示到了地图场景,做了一些资源的改动和微调。
注:以上分析均为作者兴趣出发,自学有感,对于js的认知还存在不足或者偏差,如有错误,欢迎指正。