rd.rdlevel.cn/pages/custommethod.md
OLDREDSTONE 318bbf3be2 new
2025-06-01 11:35:11 +08:00

100 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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