RPGMakerMV探秘11-窗口显示金钱
今天分享一个小插件,MOG_GoldHud.js,用于在地图场景展示金钱,如果你看过
RPGMakerMV探秘10-地图显示角色信息,那今天这个插件对于你来说就是信手拈来了。
老规矩,先上效果图:

右下角的金钱窗口,便是这个插件的显示效果。
该插件用到的资源只有两个,一个窗口、一个金钱数字。

插件包含两个插件命令”show_gold_hud”、“hide_gold_hud”,显而易见,控制金钱窗口的显示与隐藏。实际在Game_System初始化时,定义了_ghud_visible变量,插件命令改变该变量,并在update中通过判断该变量,实现显示与隐藏。
与MOG_ActorHud.js一样,该插件定义了一个特有的对象Gole_Hud。

同样利用Spriteset_Map的createUpperLayer方法将_gold_hud添加到地图精灵上。
其中_hud_size变量是一个数组,在refresh_data方法中给这个数组计算了值,其实就是划定了金钱窗口的一个矩形区域,用于后面角色进入该区域的窗口淡化处理。

进入update,初始化情况下,layout_img加载完毕,进入refresh_data方法。干了三件事,划定窗口区域、创建窗口图层、创建数字。
这次我们细看一下数字的创建:

首先,数字素材图片是200x28,知道素材的大小,才更有利于我们对代码的分析。

create_number创建了8个数字精灵,把金钱数量转换成字符串,拆分,进行循环处理,然后利用refresh_number控制每个数字精灵显示哪一帧,显示的位置,以及是否显示。

周期函数对是否空可见进行的控制,当我们人为将金钱窗口隐藏时、有对话信息时,窗口淡出,实现隐藏效果。当角色进入到金钱窗口时,同样的淡出隐藏。在淡出的过程中,有一个透明度的限制,达到这个限制时,就会停留在这个阶段,也就是我们看到角色在进入金钱窗口区域后,金钱窗口有个淡出的效果,但到一定程度时,金钱窗口就淡淡的显示,几乎不会发生变化了,除非角色离开这个区域。

数字的update主要利用refresh_number对几个数字精灵的循环处理。但是这里有个小彩蛋,那就是update_dif方法。我们知道update函数执行速度是非常快的。想象一个场景,你目前的金币时34758这个数字,打开宝箱,意外获得333个金币,那么应该显示的就是35091。如果不做特殊处理,后四位数字4758瞬间就变成5091,是不是一点都不丝滑,非常的诡异。为了解决这个问题,让数字的变化,看起来是由各个位数依次加上去的。利用的update_dif方法,这个方法使用算法,每次计算出一个值,使这个值在不断的update过程中接近最终的金币数。不断的update的过程中,中间值的变化也体现出来,这样就形成的了数字动态化的变为最终金币数量的效果。
这个小插件结合前面的知识分析起来,比较简单,也比较实用。同时也给我们在地图场景上添加其他数字化展示内容提供了参考。
注:以上分析均为作者兴趣出发,自学有感,对于js的认知还存在不足或者偏差,如有错误,欢迎指正。