跳转到目录

30 自定义方法该怎么用

也许想利用这个功能并不简单

功能介绍

编辑器中有一部分内容是没有以独立的事件的形式来设计的,也就是说,没有办法直观地设置这些内容,而是需要以代码的形式对游戏内的变量进行赋值,或是执行一些函数,这就是 调用自定义方法。如果对编程没有太多了解的话,也许会觉得这个功能略有门槛。但没关系,可以不用试图去理解太多背后的原理,只需学会如何使用自定义方法就好了。下面我将以一系列的例子来介绍具体的使用方法,其他没有介绍的自定义方法可以在附录6中查表进行举一反三。

基本格式

在使用自定义方法前,先来了解一下自定义方法表里的基本样式,搞清楚各个单词代表的功能:

以调整失误权重的方法为例

与程序上函数的写法非常类似,括号框起来的即为使用时需要替换掉的单词。简单点说,括号内的粗体字(也即图里的变量名)需要自行填入相应的数字,而没有加粗的部分直接删掉即可。

在表格里,你可能会遇见以下这种相对不规范,但更好理解的自定义方法格式:

这种写法的自定义方法只要填入相应数值并去掉 <> 即可。注意 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。轨道编号也是如此。

这样第一个房间中就不会再出现反射效果了。

关闭vs开启反射

文本型(String)

有些参数的值既不是开/关,也不是数字,它必须得是用一串词才能描述出来,比如游戏里角色的名字。这里介绍一个自定义方法,可以随时修改轨道上对应的人物,其函数是ChangeCharacter,里面需要填两个空,分别是角色的名字(文本型),以及轨道的编号(整型),中间用英文逗号隔开。举个例子,我们要把第1个轨道的科尔变成洛根(他的角色名字是Boy),在自定义方法中输入ChangeCharacter(str:Boy, 0)

注意Boy前面的str:不能丢

就能替换人物了。

注释类自定义方法

还有一种特殊的自定义方法,代码是由“()=>”开头的,需要在紫色版块中添加一个 注释,然后直接写在注释里。举个例子,有些内置主题的实际大小是超出一个屏幕的,例如4-1中的火车,我们也能在关卡中看到镜头在火车上的移动。这并非是只用移动摄像头就能做到的,而是需要移动“真实摄像头”。举个例子,我们把主题就设置为夜之列车,然后在注释中输入()=>trueCameraMove(0, 0, 45, 1, Outsine)

这里头要填写的变量有些多,但本质上也并没有太多区别,只要我们明确每个地方要填进去什么就可以了。第一个数字指的是房间号(整型),第二个数字指的是移动x轴的像素量(整型),第三个数字指的是移动y轴的像素量(整型),第四个数字指的是移动镜头的动画时长(浮点型),最后一个要填写的是缓速模式(枚举型)。不必太在乎什么叫做枚举型,你要做的就和设置移动房间与摄像头无异,区别只不过需要自己打字进去而已。

相信我这是故意miss的(

执行时间与排位顺序

你可能发现了,自定义方法里除了填写方法名称的框之外,下面还有两个参数:执行时间排位顺序:

绝对不是懒得放新的图

通常而言这两个参数保持默认设置即可,需要更改这两个参数的特殊情况在表里也会有特殊说明,按照说明设置即可。但在这里还是要说说具体作用:

执行时间:拥有两个选项 OnBarOnPreBar。默认为 OnBar, 即时间到达这个事件时立刻执行。而另一个参数 OnPreBar 则会让这个事件提前600ms执行。(这也是为什么需要避免600ms以上偏移)

排位顺序:同一时间设置多个自定义方法时,你可能需要让这些事件按一定顺序生效,这个时候就需要设置这个参数了。这个参数支持负数,数字越小,事件越早生效。

我知道你还想问什么

你也许会有这种疑问:为什么官方要设置一个“调用自定义方法”,像写代码一样完成一些明明是很成熟的功能和特效?为什么不把它们也做成普通的事件直接添加就好了?

按照官方的说法,凡是官方图中有,但编辑器内没有的效果,都是官方并不希望在自制图里被玩家大量使用的。有些功能会考虑到在某些特定的剧情关里使用一次,比较应景,但并不一定适用于绝大多数关卡。当然,也有一部分功能是没来得及做界面而暂时以自定义方法的形式出现。

总之,不使用“调用自定义方法”完全不妨碍每个玩家制作出优秀的关卡。使用这些,甚至更丰富的“条件”功能,甚至在编辑器里编写各种逻辑事件,只能起到锦上添花的作用。归根到底这依然是一个普通的可音押的单键节奏游戏,节奏的排布,镜头的运用,素材的创意,才是自制关卡的核心。

编辑器提示 凹兔 凹兔 凹兔