# 自定义方法 ## 功能介绍 编辑器中有一部分内容是没有以独立的事件的形式来设计的,也就是说,没有办法直观地设置这些内容,而是需要以代码的形式对游戏内的变量进行赋值,或是执行一些函数,这就是**调用自定义方法**。如果对编程没有太多了解的话,也许会觉得这个功能略有门槛。但没关系,可以不用试图去理解太多背后的原理,只需学会如何使用自定义方法就好了。下面我将以一系列的例子来介绍具体的使用方法,其他没有介绍的自定义方法可以在[这里](https://docs.qq.com/sheet/DQUJxb0puSFFOVWpz)中查表进行举一反三。 ## 基本格式 在使用自定义方法前,先来了解一下自定义方法表里的基本样式,搞清楚各个单词代表的功能:  与程序上函数的写法非常类似,括号框起来的即为使用时需要替换掉的单词。**简单点说,括号内的粗体字**(也即图里的变量名)**需要自行填入相应的数字,而没有加粗的部分直接删掉即可。** 在表格里,你可能会遇见以下这种相对不规范,但更好理解的自定义方法格式:  这种写法的自定义方法只要填入相应数值并去掉 `<>` 即可。**注意 `str:` 也要一并填入** 那么接下来你可能会有新的问题:我怎么知道这个单词需要填入怎样的数值呢? 还记得图里面蓝色下划线的数据类型吗?它就给你指出了需要填入的数值格式: ### 数据类型 #### 布尔型(Bool) 布尔型是最好理解的一种数据类型,它能够包含的值只有两个,就是真(true)和假(false),就也可以想象成让某个功能开启和关闭。举个最常用的例子,在`4-4`懂你这关中,单发拍子的轨道是可以抖动的,与其相关的参数是 wobblyLines, 如果你在自定义方法中输入`wobblyLines = true`:  轨道就会变成这种抖动形式。  如果你想要在后面关掉这个功能,那么就再加入一个自定义方法,填上`wobblyLines = false`,这样抖动效果就取消了。 #### 浮点型(Float) 显然很多参数并不仅仅只用开启和关闭两个状态就足够了,它可能是需要用一个数值来控制的。我们在其他的事件中也经常需要填入各种值,例如轨道的位置`(0~100%)`,节拍的长度等等。这个值可以是整数也可以是小数,总之他得是一个数字。举个例子:statusSignWidth这个参数可以控制**显示状态牌**的实际宽度。默认情况下它是会自动适配文本量的,如果想要固定在某个宽度,我们在自定义方法中输入例如`statusSignWidth = 199.99`:  状态牌就比文字部分更长了。  你也可以在编辑器里试试其他数值,甚至是负数。 #### 整型(Int) 有的参数也并非是允许填写任意的数字的,它必须得是一个整数,诸如指定第几号房间,第几号轨道或是移动多少个像素都是如此。举个例子,想要打开或是关闭某个房间的地面反射效果,在自定义方法中输入`DisableRowReflections(0)` > **注意:自定义方法里四个房间的编号并非是 1, 2, 3, 4,而是 0, 1, 2, 3。轨道编号也是如此。**  这样第一个房间中就不会再出现反射效果了。  #### 文本型(String) 有些参数的值既不是开/关,也不是数字,它必须得是用一串词才能描述出来,比如游戏里角色的名字。这里介绍一个自定义方法,可以随时修改轨道上对应的人物,其函数是ChangeCharacter,里面需要填两个空,分别是角色的名字(文本型),以及轨道的编号(整型),中间用英文逗号隔开。举个例子,我们要把第1个轨道的科尔变成洛根(他的角色名字是**Boy**),在自定义方法中输入`ChangeCharacter(str:Boy, 0)`  就能替换人物了。 ## 注释类自定义方法 还有一种特殊的自定义方法,代码是由“`()=>`”开头的,需要在紫色版块中添加一个**注释**,然后直接写在注释里。举个例子,有些内置主题的实际大小是超出一个屏幕的,例如`4-1`中的火车,我们也能在关卡中看到镜头在火车上的移动。这并非是只用移动摄像头就能做到的,而是需要移动“真实摄像头”。举个例子,我们把主题就设置为夜之列车,然后在注释中输入`()=>trueCameraMove(0, 0, 45, 1, Outsine)`:  这里头要填写的变量有些多,但本质上也并没有太多区别,只要我们明确每个地方要填进去什么就可以了。第一个数字指的是房间号(整型),第二个数字指的是移动x轴的像素量(整型),第三个数字指的是移动y轴的像素量(整型),第四个数字指的是移动镜头的动画时长(浮点型),最后一个要填写的是缓速模式(枚举型)。不必太在乎什么叫做枚举型,你要做的就和设置移动房间与摄像头无异,区别只不过需要自己打字进去而已。  ## 执行时间与排位顺序 你可能发现了,自定义方法里除了填写方法名称的框之外,下面还有两个参数:`执行时间` 和 `排位顺序`:  通常而言**这两个参数保持默认设置即可**,需要更改这两个参数的特殊情况在表里也会有特殊说明,按照说明设置即可。但在这里还是要说说具体作用: `执行时间`:拥有两个选项 `OnBar` 和 `OnPreBar`。默认为 `OnBar`, 即时间到达这个事件时立刻执行。而另一个参数 `OnPreBar` 则会让这个事件提前`600ms`执行。(这也是为什么需要避免600ms以上偏移) `排位顺序`:同一时间设置多个自定义方法时,你可能需要让这些事件按一定顺序生效,这个时候就需要设置这个参数了。这个参数支持负数,数字越小,事件越早生效。 ## 快捷查询