RpgmakerMV脚本教程(2)-引擎机制分析
1.变量的讲解
上篇文章我们讲到通过开发者工具修改web中javascript变量来实现为主角名字。
那么今天我们就来详细讲一下主要全局变量的作用。之前我们提到过,大多数全局变量都是以$开头。而以$开头的变量又分为两类。

$data开头的变量代表是数据文件的实体,就是Rpgmaker保存在data文件夹中json文件的变量表示,它们每一个变量中基本只有属性(数值型,数组型,object型),没有方法。他们的内部结构也大概跟json文件一致。他们是由rpg_managers.js中的DataManager类从json文件转变为全局变量的。

我们打开rpg_managers.js,找到DataManager类的定义,很容易就找到如图所示的全局变量与json文件的对应关系。其中地图数据是单独处理的,所有的地图数据被统一放到 $dataMapInfos变量中,而 $dataMap则为当前主角所在的地图,它是会随着主角的所在的位置而变换的。
当游戏引擎加载完毕json文件之后会根据这些$data变量按照游戏中的具体需要生成$game开头的各个变量,$game开头的变量不光有属性的定义,而且内部也有很多很多方法,可以看成是一个面向对象的封装。
2.功能的讲解
除了数据层面,下面我们讲下功能层面的
rpg_managers.js,rpg_objects.js,rpg_scenes.js,rpg_sprites.js,rpg_windows.js这几个js文件基本就是此rpg框架的核心功能文件。
rpg_managers.js是里主要有DataManager(负责数据的读和写),SceneManager(负责游戏场景切换)关于场景的定义以后会详细介绍,BattleManager(处理战斗)。
rpg_objects.js里的对象比较多,其中Game_Interpreter很重要,它主要负责对事件指令的解析与处理。其余的对象等以后用到的时候再给大家讲解。
rpg_scenes.js里定义游戏中的所有场景,比如选“新游戏”“继续游戏”的标题界面场景,地图场景,菜单场景(复用),对话框场景(复用),物品使用场景,技能使用场景,装备场景,等等。场景就相当于一个界面,这个界面中可以有窗口(rpg_windows.js中定义),也可以有一些图块精灵(rpg_sprites.js中定义),场景相当与组织起很多元素展示给用户看。很多场景是灵活可复用的,稍加变化可以用在很多地方。
3.事件与脚本执行机制的讲解
Rpgmaker中我们自定的js脚本基本有两种方式被调用
1.覆盖,让我们自定的方法顶替游戏中的某个方法,在游戏运行时系统会优先运行我们编写的同名方法。
2.直接调用,我们可以在事件指令->第三页->高级->脚本中直接输入javascript脚本。我们优先讲这种方法。

我们切换事件编辑模式,双击地图任意一点新建一个事件,在事件脚本中输入 alert('Hello Word!') ,然后确定。

然后点击编辑器中的保存按钮,后直接刷新我们之前在Chrome浏览器中打开的游戏。继续游戏后我们去激活我们刚创建的地图中的事件。就会弹出一个js弹窗。

我们刚刚录入的js脚本也被储存在了地图数据中,打开data\Map001.json文件我们会发现我们刚刚录入的js脚本。

将events复制出来并格式化后,观察下它的结构http://js.jirengu.com/roba/2/watch?js
其中events数组中每个元素标识地图中一个事件。再往下,某一个事件下的pages表示事件下的事件页面。再往下事件页中的list中每个元素表示事件编辑时“执行内容”列表中的每一行。

第一行表示我们插入的js脚本那行,第二行表示预留的那个空指令。每个指令的code为指令编号,可见355号就是“脚本”指令,indent是缩进层级,如果在条件和循环中的指令,在“执行内容”列表中会有一个缩进,缩进几个位置这个值就要填几,如下图一个循环嵌套一个分支,那么每行指令的indent都应当为标注的值。而parameters就是指令接收的参数,参数的个数和内容是由code决定的,不同的code需要不同的参数,本行355就需要一个js脚本的字符串。

下面我们在项目的plugins文件夹新建一个FirstPlugin.js文件,文件中编写如下图中内容。全局变量在任何地方都是可以调用的,在这里我们稍微修改下代码,把之前修改的主角名显示出来。 http://js.jirengu.com/gaka/2/watch?js

然后再Rpgmaker中的插件管理里激活我们的插件。

之后新建一个地图事件,在地图事件中键入调用函数的代码。

别忘了保存!

在我们刷新网页,继续游戏,当我们触发事件时就会有如下图的效果。

好了以上就是我们今天讲解的内容,后面的教程会为大家讲解更多,多谢阅读,文章编写不易,欢迎赞赏,谢谢。