RPGMaker MV 插件基础01:制作一个插件
打开RPGMakerMV,新建一个项目,在菜单栏中找到游戏→开启文件夹
此时会打开新建的项目的文件夹内,选择js\plugins\文件夹,在这里面新建一个文件“test.js”,用你习惯的工具打开(推荐sublime),输入以下代码:
//============================================================================= |
以上代码是声明插件的信息,在游戏运行过程中不会执行,关键点在这里:
@plugindesc 插件名称
@author 插件作者(你的名字)
@help 从help之后直接注释块结束,都是插件帮助
保存文件,在RPGMaker中选择工具→插件管理,打开以下界面:
在第一行右键→编辑(或直接双击第一行),可以看到以下界面:
在名称组合框中,选择刚才新建的插件“test”,可以看到刚才声明的插件信息都显示在界面中了:
另外有几个说明:
状态:ON表示开启,OFF表示关闭(不生效)
帮助:点击后打开帮助信息(上面代码中@help后面的所有信息)
参数部分后面单独说吧
RPGMaker MV 插件基础02:插件的参数定义
回顾上一节,我们创建了一个test.js文件,对应的插件名称就是test,我们定义了插件的名称,作者与帮助信息,这节讲一下如何定义插件的参数并且通过js代码获得参数
还是接着上一节的js文件,在定义作者与帮助信息之间,增加这样三行:
* @param centent |
这样就定义了一个插件的参数,关键点如下:
@param 参数的名称
@desc 此参数的描述
@default 默认值
保存js文件,打开RPGMaker的插件管理界面,就能看到刚才定义的参数了:
双击参数名称或参数值,可以修改这个参数。
在js中,我们需要获得在插件管理器中设置的值,如何获得呢?在注释块外增加两行代码:
var MyParameters = PluginManager.parameters('test'); |
解释一下:
- PluginManager是RPGMaker提供的插件管理类,PluginManager.parameters方法可以获得指定插件中所有插件参数对象(’test’是插件名)
- 获得此对象后,将这个对象赋给MyParameters,此后,MyParameters就代表’test’插件的参数了
- alert是弹出一个对话框,对话框的内容是MyParameters对象中的centent这个参数的值
好了,现在我们保存一下,运行游戏,可以得到以下结果:
可以看到,游戏成功弹出对话框,而对话框的内容正好是我们设置的centent的值。
(PS:为什么背景是黑框?因为插件在加载时就弹出了对话框,而这个时候游戏还没有加载完全,所以背景是黑色的,同时我们弹出来的对话框是模式窗口,也就是说在这个弹框关闭之前js代码不会往下执行,所以只要关闭对话框就可以恢复正常。当然这种写法是很有问题的,这里只是让大家了解如何获得参数的值才使用这种写法)
如果需要定义多个参数时怎么办呢?只需要在定义作者与帮助信息之间插入即可:
* @param centent1 |
而调用的方法也是一样:
var MyParameters = PluginManager.parameters('test'); |
另外,参数名称还支持包含空格,如以下代码:
* @param This is centent3 |
注意在这种情况下,使用MyParameters.This is centent3来访问插件参数将会报错,这个时候我们需要换一种访问方法
var MyParameters = PluginManager.parameters('test'); |
当然上面的MyParameters.centent1写成MyParameters[“centent1”]也是一样的
以上就是插件参数的定义与从js中获取在RPGMaker设置的值的方法,下面是全部代码:
//============================================================================= |
RPGMaker MV 插件基础03:如何重写方法
RPGMaker MV 插件基础04:插件指令与脚本
插件指令与脚本是应用在RPGMaker事件流程中的,如果你在插件里自定义了一种行为,那么可以通过插件指令来调用,脚本就更加灵活了,因为脚本里是直接可以编写js代码的。当然自定义的函数也可以被脚本调用。
首先来了解一下插件指令,先新建一个“test.js”插件,在插件中插入以下代码:
//处理插件指令 |
先解释一下这几行代码:
第1行就是重写官方代码中的方法,其实官方代码中这个方法是个空方法,也就是说这个方法本就是预留给插件开发者的
第2行,判断command是不是等于字符串“test”,command是方法的一个参数,也就是插件指令中的命令,命令是什么呢我们后面会讲
第3行,$gameMessage是游戏消息的对象,add就是加入一个消息,消息的内容是args这个数组的第0号元素,args是插件指令的参数列表
好了,保存代码之后,把插件添加到插件管理器中。
在场景中新建一个事件,在右侧的事件执行内容中右键新增,打开后按下图操作:
可以看到我们在输入框中输入了“test hello”,这里的内容用空格格开,空格前的test就是插件命令(可以翻上去看看第2行代码的解释)
空格后的hello就是插件指令的参数(可以翻上去看看第3行代码的解释),当然了这里只有一个参数,如果需要多个参数就再用空格隔开就好了
确定后,运行游戏,去触碰事件,可以看到如下效果:
可以看到,插件指令的参数被当成消息显示出来了,可以在插件指令中修改其参数再来看看效果。
这就是简单的插件指令的用法,接下来也简单说说脚本如何调用插件中定义的方法,在test.js里再加入如下代码:
//脚本可以调用本方法 |
这里我们简单定义了一个方法,然后我们在事件中新建一个这样的内容:
保存后运行,与事件交互,可以看到效果:
另外在条件分支中还可以调用我们自己定义的方法,但是需要返回一个布尔值(true 或 false)
//脚本返回值 |
增加以上代码后,在事件中新增一个条件分支,如下图:
为每个分支也增加消息的输出:
我们看一下这个事件,由于我们条件是test_equal(1, 1),而上面我们新加的方法是判断两个参数是否相等,所以可以看出来与事件交互时,应该会调用方法test_fun,也就输出消息“满足条件”,运行一下看看效果是否如此:
可以看到运行结果与我们的期望相符,这时我们修改一下条件中的脚本:
这个时候1和2不相等了,所以应该会执行脚本指令,也就是输出消息“不满足”,运行看看效果:
好了,同样是符合我们的期望的
这就是插件指令与脚本的一些用法,可以帮助我们写出更多与玩家有真正交互的功能与特别的玩法
RPGMaker MV 插件基础05:获得注释内容与IIFE
如果我们的插件只针对游戏中的某一部分地图、角色、职业、技能等,并且针对不同的元素我们将有不同的处理的话,使用注释来定义新的功能是非常有用的。
什么是注释呢?我们打开一个项目,在地图列表中选择一个地图,右键->编辑,在打开的面板中输入以下信息:
我们在“注释”输入框中输入了“PK:true”并使用尖括号括起来,表示什么呢?表示我们定义了一个名为PK的注释,而这个注释的值为”true”
我们再新建一个地图,在注释中输入以下信息:
设置完成后,我们新建一个插件,这里说一个题外话,我们之前所有的插件名称都叫test.js,这样其实是很不好的,建议大家以后可以根据“插件作者名缩写_插件名称.js”来为插件命名,比如现在我们命名为“Nazgul_metaTest.js”
头部对于插件名、作者、帮助信息的定义不再讲解,直接看代码部分:
(function(){ |
需要注意的是我们这里与以前不一样的写法,就是我们写了一个(function(){ ... })(),这个是用来做什么的呢?这是JS里的IIFE语法,即“立即执行函数”,也就是这个函数定义的同时立即执行了。
这时你可能有一个疑问:如果我按以前的写法,不也是立即执行的吗?是的,按以前的写法同样是立即执行的,那么这里为什么要这样写呢,因为这种写法有一个好处,就是变量不会全局化,也就是如果万一你的插件定义的变量一不小心与别人的变量名相同,那么有一个变量就将会被覆盖,所以在某些时候我们推荐这样的写法。
接下来我们解释一下上面的代码:
前3行即我们前面讲过的,重写官方方法并调用官方原本定义的方法
接下来我们判断地图中是否定义了PK这个注释,可以直接使用$dataMap.meta.PK ,$dataMap表示当前地图的引用,如果这个值是null,表示地图中并没有定义这个值那么if($dataMap.meta.PK)将判断不通过,if语句块里的代码就不会被执行。
那么运行时会有什么效果呢?
\1. 当我们进入Map001时,会弹框内容为“true”
\2. 当我们进入Map002时,会弹框内容为“false”
\3. 当我们进入一个没有设置该注释的地图时,不会有弹框出现
我们在角色、技能、道具等地也可以使用注释,比如我们在角色列表中加入如下定义:
定义后可以在代码中使用$dataActors[1].meta.sex来获得角色1的注释“sex”。
这里有一个差别,上面的示例中,可以使用$dataMap表示当前地图的引用,而这里则需要$dataActors[1]来表示具体某一个角色,实际上$dataMap[1]或者$dataMap["Map001"]这样的引用都是无效的
RPGMaker MV 插件基础06:了解游戏数据与F8调试
随着对RMMV插件了解的深入,我们会发现如果我们想要对游戏数据进行一些扩展,首先要了解游戏数据,游戏数据在官方代码中的rpg_managers.js里,这一节我们将要对这个官方类有一些基础的了解,并且我们使用F8调试器来查看这些游戏数据。
打开rpg_managers.js,翻到第14行,可以看到以下代码:
var $dataActors = null; //角色 |
在这些代码中,$data开头的是我们在RM编辑器中定义的数据,而$game开头的则表示在游戏运行过程中产生的实时数据。
二者有何区别,打个比方:我们定义了玩家从1级升到2级需要多少经验、2级升到3级需要多少经验,这些数据就是在编辑器中定义的,而当游戏者真实在游戏时,我们还需要记录玩家到底获得了多少经验值,玩家的当前经验值就是记录在$gameActors中的。
上面的注释中是数据的简单说明,要了解详细的,我们可以直接从调试信息中获得很多有用的信息,首先运行游戏,点“新游戏”进入游戏中,再按F8打开调试窗口:
打开后,默认就选择了console(控制台)页签,我们直接在这里输入$dataMap,输入时可以看到有很方便的提示,输入结束后,按Enter键,下方输出了$dataMap这个对象,可以点击向右的小三角展开:
在这里可以看到此对象的完整结构(还有上一节加的“PK:true”),我们可以根据名称来猜测意义。
输入$dataMap.meta,按Enter键,可以输出上一节讲的注释。
控制台还可以测试函数的调用,比如以下函数(写在一个插件里并引用此插件,注意此代码不能写在(function(){ ... })()中):
var testFun = function(a, b){ |
然后在控制台中输入testFun,则会打印出这个函数的源代码,如果输入testFun(3, 5),则会打印出函数的返回值
