自定义视图命令
一、前言
这节教学如何编写视图命令提供给视图脚本引擎使用。
系统提供了一套视图命令集,比较简单,封装粒度小,能自由组合多种功能,如果不满足现有的视图命令集,可以自己写一套或做几个自己常用的视图命令集来扩充功能,任何代码都可以做成视图命令集,原理其实很简单,就是模板+参数替换。
二、目录结构
视图命令脚本的存放目录有几个地方:
1、项目根目录/Plugins/$Leamus/$VisualScripts/<命令集文件夹名>;
2、引擎工作目录/Plugins/$Leamus/$VisualScripts;
3、项目根目录/Plugins/<开发组名>/<插件名>/VisualScripts;
注意:第1个目录是 主视图命令脚本集,它包含比较完整的一套视图命令供使用,而且开发时只能选一个主视图命令脚本集(在视图编辑器最上面的标题按钮上选择),换了主视图命令脚本集,之前的命令都会被清空,所以一开始得选择好。第2个目录是所有工程都能使用的全局视图命令脚本集,它会以追加的方式显示在主视图命令后面。第3个目录是插件视图命令脚本集,一般是提供插件的视图脚本编程方案,也是以追加的方式显示在主视图命令后面。
三、编写方法
在这里介绍编写方法其实挺麻烦,如果有些编程经验,看一下示例怎么写会非常简单,就是复制粘贴、复制粘贴就好了。。这里主要讲一些重点和注意事项。
1、选一个你要做的视图命令集的类型(主视图命令、全局视图命令还是插件命令),在对应位置新建一个js文件,名称随意。
2、按照示例拷贝结构,主要是groupInfo, commandInfos两个对象,groupInfo是命令集的信息(包括组名和颜色),commandInfos就是我们的重点,命令集的定义。
3、commandInfos是一个数组,包含了所有的视图命令定义,每一个元素是一个对象,这个对象有2个属性:command(命令定义)和params(参数定义,可选)。
4、command是一个数组,每一个元素都代表了不同的涵义:[命令显示, 命令模板, 说明, 缩进空格数, 是否换行, 代码颜色, 按钮颜色, [联用命令列表], 编译运行函数];
元素0 代表视图命令显示的名称;元素1 代表代码模板,这里使用%1、%2。。。来标记要替换的参数;元素2 是视图命令的说明;元素3 是缩进的空格数;元素4 表示生成的代码是否加一个换行;元素5 代表我们视图编辑区显示的命令颜色;元素6 表示命令按钮的颜色;元素7 (可选)描述了添加/插入命令时需要联用的命令(自动插入);元素8 (可选)是一个函数,如果需要高级生成代码方式就定义这个函数,系统默认是简单的参数替换。
5、params是一个二维数组,每一个数组元素是一个参数定义,每一个参数数组的元素都代表了不同的涵义:[[参数1说明, 类型, 是否必须(true为必填,false为编译缺省是空字符串,其他(包括undefined、null也为字符串)为编译时原值), 输入类型, 输入参数, 颜色], 。。。]];
参数定义中,元素1是提示文字;元素2是这个参数的类型(有string、number、bool、string|number、name、json、unformatted、code、label),每个类型的样式和生成的结果会有不同,比如string会带引号,name是一个符合变量命名的文本,code是一个代码文本框,label是添加一个提示等等;元素3为true表示是必填项,为其他值表示默认值;参数4为输入类型(为0表示只给默认值(输入参数为默认值);为1表示选择某目录下的文件夹,输入参数为目录路径;为2表示选择预选选项(输入参数为[[选项], [对应值], 默认值]);为9表示固定值);参数5为参数4的输入参数;参数6为参数显示的颜色。
注意:一般我们定义一个视图命令,就是一个简单的模板代码+参数替换,如果需要更高级的生成方式,command的第9个参数可以定义一个函数,它能接收到所有参数,并返回一个字符串便能生成一条代码结果。
四、示例
我们看一个载入地图的视图命令,讲一下就明白了:
// '载入地图':
{
command: ['载入地图', 'game.loadmap(%1);', '载入一张地图', 0, true, 'red', 'white'],
params: [
['*@地图名', 'string', true, 1, GameMakerGlobal.config.strProjectRootPath + GameMakerGlobal.separator + GameMakerGlobal.config.strCurrentProjectName + GameMakerGlobal.separator + GameMakerGlobal.config.strMapDirName + GameMakerGlobal.separator, 'green'],
['载入一张地图', 'label'],
],
}
先看command,元素1其实就是视图命令的本质,会生成的字符串模板,%1表示会用第一个参数的值来替换它,其他参数简单就不介绍了。
再看params,第一个参数的类型是string,必填项,输入类型是1(表示能选择一个目录),下一个参数就是我们的地图目录,所以我们可以长按并选择一个编辑好的地图。第二个参数的类型是label,所以只是显示一个提示。
这个命令的整个效果,就是增加一个”载入地图“视图命令,我们选择后会弹出参数编辑(只有一个地图名参数),我们长按并选择一张地图后点确定添加到视图编辑区内,最后生成的代码就是:game.loadmap('地图名');。
更新日志
d5a59
-于cf9b7
-于e4089
-于aeb97
-于d5d68
-于