forked from RDCNWebs/rd.rdlevel.cn
1026
This commit is contained in:
parent
139f1eef71
commit
8faac81f8f
@ -43,6 +43,7 @@
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
loadRDView()
|
||||
const originalCodeRenderer = $docsify.markdown?.renderer?.code;
|
||||
$docsify = {
|
||||
...$docsify,
|
||||
...{
|
||||
@ -52,10 +53,10 @@
|
||||
if (lang.trim().startsWith('rdview')) {
|
||||
return RDViewRender(lang, code);
|
||||
}
|
||||
return `<pre data-lang="${lang}"><code>${escapeHtml(code)}</code></pre>`;
|
||||
return originalCodeRenderer ? originalCodeRenderer(code, lang) : `<pre data-lang="${lang}"><code>${escapeHtml(code)}</code></pre>`;
|
||||
},
|
||||
image: function (src, title, alt) {
|
||||
return `<div class="image-tip"><img class="medium-zoom-image" src="${src}" alt="${alt}">${alt?`<p>${alt}</p>`:""}</div>`;
|
||||
return `<div class="image-tip"><img class="medium-zoom-image" src="${src}" alt="${alt}">${alt ? `<p>${alt}</p>` : ""}</div>`;
|
||||
},
|
||||
}
|
||||
},
|
||||
@ -85,7 +86,7 @@
|
||||
<script src="/script/docsify-copy-code.min.js"></script>
|
||||
<script src="/script/switchLightDarkMode.js"></script>
|
||||
<script src="/script/otto.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/prismjs@1/components/prism-yaml.js"></script>
|
||||
<script type="module" src="/script/special.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@ -15,14 +15,14 @@
|
||||
2. 在 Visual Studio 中,依次点击 **工具** > **NuGet 包管理器** > **程序包管理器控制台**。
|
||||
3. 在控制台中输入以下命令:
|
||||
|
||||
```
|
||||
```bash
|
||||
Install-Package RhythmBase -Version 1.2.0-rc2
|
||||
```
|
||||
|
||||
4. 等待安装完成,并确保项目已引用所需的 NuGet 包。
|
||||
5. 如果使用 .NET CLI,请输入:
|
||||
|
||||
```
|
||||
```bash
|
||||
dotnet add package RhythmBase -version 1.2.0-rc2
|
||||
```
|
||||
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
# 更新信息
|
||||
|
||||
#### 2025-10-26
|
||||
- 文档补充
|
||||
- 修复代码块渲染异常
|
||||
- 首页添加互动模块引导
|
||||
|
||||
#### 2025-10-18
|
||||
- [自制角色与精灵资源](../pages/spritesheet.md)页添加了音效和表情命名规则相关内容。
|
||||
|
||||
|
||||
@ -5,7 +5,11 @@
|
||||
|
||||
# 节奏医生中文编辑器教程
|
||||
|
||||
> 此网页正在维护中。如有任何问题,欢迎指出。
|
||||
> 此网页正在维护中。
|
||||
网页已开源至[此处](https://git.obugs.cn/RDCNWebs/rd.rdlevel.cn),欢迎投稿。
|
||||
|
||||
> 页面内的大部分事件栏板块包含点击互动。尝试点击以获得更生动的演示。
|
||||
也可以在[此处](../pages/appendix_tools.md)游玩事件栏板块。
|
||||
|
||||
《节奏医生》编辑器中文教程旨在以教学的形式帮助您快速了解编辑器的界面,基础功能,设计技巧和做谱规范。
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# 普通拍子的衍生节奏型
|
||||
# 普通拍的衍生节奏型
|
||||
|
||||
## 分解为自由时长节拍
|
||||
|
||||
@ -85,7 +85,7 @@ eb.PulseFreeTimeBeat 8 1[pulse=9];
|
||||
|
||||
不要使用内置的 `sndBeepMid` 音效!
|
||||
|
||||
八拍子也可以是摇摆拍子,只需要将所有偶数拍选择并拖动即可变成摇摆拍:
|
||||
八拍子也可以是摇摆拍,只需要将所有偶数拍选择并拖动即可变成摇摆拍:
|
||||
|
||||
```rdview 10 3
|
||||
eb.AddClassicBeat 1 0[tick=6,swing=0.5];
|
||||
@ -99,7 +99,7 @@ eb.PulseFreeTimeBeat 7 1[pulse=9];
|
||||
eb.PulseFreeTimeBeat 8.5 1[pulse=9];
|
||||
```
|
||||
|
||||
在八拍子中,**激活拍子**与八拍子的对应关系如下图所示。不要给第1拍和第3拍设置X拍子,这样做它就相当于变回普通拍子了。
|
||||
在八拍子中,**激活拍子**与八拍子的对应关系如下图所示。不要给第1拍和第3拍设置X拍子,这样做它就相当于变回普通拍了。
|
||||
|
||||

|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# 单发拍子的衍生节奏型
|
||||
# 单发拍的衍生节奏型
|
||||
|
||||
## 单发拍子进阶用法
|
||||
## 单发拍进阶用法
|
||||
|
||||
本小节的内容可能会稍显冗长和晦涩,希望大家能保持耐心多多琢磨。
|
||||
|
||||
@ -13,9 +13,9 @@ es.SayReadyGetSetGo_Go 5[];
|
||||
eb.AddOneshotBeat 5 1[loop=1,tick=1.5,interval=4];
|
||||
```
|
||||
|
||||
可以看到,虽然 Get-Set 与 Set-Go 之间的间隔不同,但依然保持了上述的对应关系。实际上,这就是`4-4`使用的单发拍子。
|
||||
可以看到,虽然 Get-Set 与 Set-Go 之间的间隔不同,但依然保持了上述的对应关系。实际上,这就是`4-4`使用的单发拍。
|
||||
|
||||
在`2-3`中也出现了摇摆单发拍子,可以试着自己理解一下这关的单发拍子提示:
|
||||
在`2-3`中也出现了摇摆单发拍,可以试着自己理解一下这关的单发拍提示:
|
||||
|
||||
```rdview 10 2
|
||||
eb.AddOneshotBeat 1[];
|
||||
@ -26,7 +26,7 @@ eb.AddOneshotBeat 7[tick=0.75];
|
||||
eb.AddOneshotBeat 8[tick=0.75];
|
||||
```
|
||||
|
||||
如果我们在此基础上更进一步,会发生什么呢?来看看`4-4N`中出现过的这段单发拍子:
|
||||
如果我们在此基础上更进一步,会发生什么呢?来看看`4-4N`中出现过的这段单发拍:
|
||||
|
||||
```rdview 12 4
|
||||
g 1 1 4 2[offset=4]{
|
||||
@ -45,11 +45,11 @@ eb.AddOneshotBeat 9[tick=0.75];
|
||||
eb.AddOneshotBeat 10.5[tick=0.75];
|
||||
```
|
||||
|
||||
可以看到,图中的单发拍子已不再局限于一个单发拍子不断重复了,而是变成了若干个单发拍子构成的单发拍子组的不断重复,但前面讲过的与护士提示之间的对应关系仍保持不变。由此我们可以得到单发拍子的核心规则:
|
||||
可以看到,图中的单发拍已不再局限于一个单发拍不断重复了,而是变成了若干个单发拍构成的单发拍组的不断重复,但前面讲过的与护士提示之间的对应关系仍保持不变。由此我们可以得到单发拍的核心规则:
|
||||
|
||||
单发拍子本质上是对一段节奏(循环节)的不断重复,这段节奏可以由一个或多个单发拍子构成。在单发拍子开始之前,会使用护士提示,以 Rea、Dy、Get、Set 的形式,重复一次(或多次)这段单发拍子循环节,并在最后用 Go 表示单发拍子的开始。
|
||||
单发拍本质上是对一段节奏(循环节)的不断重复,这段节奏可以由一个或多个单发拍构成。在单发拍开始之前,会使用护士提示,以 Rea、Dy、Get、Set 的形式,重复一次(或多次)这段单发拍循环节,并在最后用 Go 表示单发拍的开始。
|
||||
|
||||
当对一段较为复杂的单发拍子进行提示的时候,由于循环节由多个单发拍组成,护士必然会提示多个脉冲和按拍的位置,这时仍然需要遵循只在最后一对脉冲和按拍处使用 Get Set,其余部分均使用 Rea Dy。
|
||||
当对一段较为复杂的单发拍进行提示的时候,由于循环节由多个单发拍组成,护士必然会提示多个脉冲和按拍的位置,这时仍然需要遵循只在最后一对脉冲和按拍处使用 Get Set,其余部分均使用 Rea Dy。
|
||||
|
||||
```rdview 13 4
|
||||
g 1 1 4 2[offset=4]{
|
||||
@ -77,11 +77,11 @@ eb.AddOneshotBeat 12[tick=0.5];
|
||||
|
||||
## 复杂脉冲
|
||||
|
||||
正如`2-1`所说的那样,单发拍子的脉冲位置并不重要,只要保证按拍位置不变,脉冲位置是可以任意变化的。
|
||||
正如`2-1`所说的那样,单发拍的脉冲位置并不重要,只要保证按拍位置不变,脉冲位置是可以任意变化的。
|
||||
|
||||
同时,一个单发拍子也可能拥有不止一个脉冲。若要实现这种效果,只需将几个单发拍子的尾端对齐,首端放在不同位置即可。
|
||||
同时,一个单发拍也可能拥有不止一个脉冲。若要实现这种效果,只需将几个单发拍的尾端对齐,首端放在不同位置即可。
|
||||
|
||||
以下单发拍子均是合法的:
|
||||
以下单发拍均是合法的:
|
||||
|
||||
```rdview 9 2
|
||||
eb.AddOneshotBeat 1[];
|
||||
@ -96,9 +96,9 @@ eb.AddOneshotBeat 7.5[tick=0.5];
|
||||
|
||||
但这样一来,前面所说的“Rea、Get 对应单发拍脉冲”就没有意义了吗?其实不然,Rea、Get 的作用如下:
|
||||
|
||||
1. 护士提示的第一个词必然是 Rea 或 Get,也就意味着这个词代表单发拍子循环节的开始,与末尾的 Go 对应。
|
||||
1. 护士提示的第一个词必然是 Rea 或 Get,也就意味着这个词代表单发拍循环节的开始,与末尾的 Go 对应。
|
||||
|
||||
2. Rea、Get 可以辅助玩家掌握单发拍子的节奏型。在实际游玩中,玩家通常是会以 Rea、Get 为基础来进行单发拍子的演奏的。所以通常要使 Rea、Get 契合音乐或节拍设计,来达到方便玩家记忆或丰富游戏体验的效果。
|
||||
2. Rea、Get 可以辅助玩家掌握单发拍的节奏型。在实际游玩中,玩家通常是会以 Rea、Get 为基础来进行单发拍的演奏的。所以通常要使 Rea、Get 契合音乐或节拍设计,来达到方便玩家记忆或丰富游戏体验的效果。
|
||||
|
||||
举个例子:Rea-Dy-Get-Set-Go 与 Rea-Dy--GetSet-Go,尽管两者的按拍时机相同,但不同的 Rea、Get 位置会给人带来不同的游玩体验。
|
||||
|
||||
@ -134,13 +134,13 @@ g 1 4 4 1 [offset=4]{
|
||||
};
|
||||
```
|
||||
|
||||
## 跳过单发拍子
|
||||
## 跳过单发拍
|
||||
|
||||
游戏在`2-1N`中引入了一种全新的单发拍子机制:跳过单发拍子。这种单发拍子的规则很简单:跳过单发拍子之后的一次单发拍子按拍会被跳过。跳过单发拍子无需手动添加提示,只需在单发拍子修饰符中选择跳过单发拍子,相关的视效与音效提示会被自动添加到关卡中。
|
||||
游戏在`2-1N`中引入了一种全新的单发拍机制:跳过单发拍。这种单发拍的规则很简单:跳过单发拍之后的一次单发拍按拍会被跳过。跳过单发拍无需手动添加提示,只需在单发拍修饰符中选择跳过单发拍,相关的视效与音效提示会被自动添加到关卡中。
|
||||
|
||||
当然,在被跳过的单发拍子的这段空白时间里,也可以放置多个单发拍子脉冲,以丰富谱面的节奏设计。跳过拍子的“间隔”参数会影响跳过符号的动画时长。
|
||||
当然,在被跳过的单发拍的这段空白时间里,也可以放置多个单发拍脉冲,以丰富谱面的节奏设计。跳过拍的“间隔”参数会影响跳过符号的动画时长。
|
||||
|
||||
需要注意的是,跳过单发拍子会跳过下一次**击拍**,而不是下一个循环节。
|
||||
需要注意的是,跳过单发拍会跳过下一次**击拍**,而不是下一个循环节。
|
||||
|
||||
```rdview 7 4
|
||||
eb.AddOneshotBeat 1[type=skipshot];
|
||||
@ -152,19 +152,19 @@ eb.AddOneshotBeat 4.5 2[tick=1.5];
|
||||
eb.AddOneshotBeat 5.25 2[tick=0.75];
|
||||
```
|
||||
|
||||
另外,在剧情关卡中,跳过拍子的位置如果按下空格会计算成失误,但编辑器中默认是不会失误的。
|
||||
另外,在剧情关卡中,跳过拍的位置如果按下空格会计算成失误,但编辑器中默认是不会失误的。
|
||||
|
||||
## 方块单发拍子
|
||||
## 方块单发拍
|
||||
|
||||
常规的单发拍子是针对一个节奏型的不断重复,而**方块单发拍子**是“一次性”的单发拍子,即没有重复,只需按拍一次。
|
||||
常规的单发拍是针对一个节奏型的不断重复,而**方块单发拍**是“一次性”的单发拍,即没有重复,只需按拍一次。
|
||||
|
||||
方块单发拍子最早出现于`MD-1`,在第五章更新后也出现在了`5-X`用于预警细分拍子的出现。
|
||||
方块单发拍最早出现于`MD-1`,在第五章更新后也出现在了`5-X`用于预警细分拍的出现。
|
||||
|
||||
选中一个单发拍子,在修饰符中选择方块符号`◇`,将细分数量设为 1 ,便创建了一个方块单发拍子。方块单发拍子出现时需要添加特殊音效,在方块单发拍子的声音栏选择“特殊”即可自动添加提示音。
|
||||
选中一个单发拍,在修饰符中选择方块符号`◇`,将细分数量设为 1 ,便创建了一个方块单发拍。方块单发拍出现时需要添加特殊音效,在方块单发拍的声音栏选择“特殊”即可自动添加提示音。
|
||||
|
||||

|
||||
|
||||
除此之外,方块单发拍子也需要护士提示。这种护士提示与普通单发拍子的提示类似,唯一的不同点在于最后的 Go 被替换为了 One。
|
||||
除此之外,方块单发拍也需要护士提示。这种护士提示与普通单发拍的提示类似,唯一的不同点在于最后的 Go 被替换为了 One。
|
||||
|
||||
```rdview 5 3
|
||||
eb.AddOneshotBeat 3[];
|
||||
@ -173,15 +173,15 @@ es.SayReadyGetSetGo_Set 2 1[];
|
||||
es.SayReadyGetSetGo_Go 3 1[];
|
||||
```
|
||||
|
||||
如果相同拍长的方块单发拍子连续出现了多次,无需为每次出现添加完整的护士提示。可以逐步减少护士提示,直到完全没有护士提示,只剩下特殊提示音。
|
||||
如果相同拍长的方块单发拍连续出现了多次,无需为每次出现添加完整的护士提示。可以逐步减少护士提示,直到完全没有护士提示,只剩下特殊提示音。
|
||||
|
||||
## 细分拍子
|
||||
## 细分拍
|
||||
|
||||
与方块单发拍子的概念类似,**细分拍子**也是“一次性”的单发拍,但是会产生多次等间距的心跳脉冲,按键的次数也变为多次。
|
||||
与方块单发拍的概念类似,**细分拍**也是“一次性”的单发拍,但是会产生多次等间距的心跳脉冲,按键的次数也变为多次。
|
||||
|
||||
细分拍子最早出现于`MD-1`,当时官方谱面没有官方名称,且最多仅有两个三角拍;后来第五章更新后三角拍首次出现在`5-1`并正式更名为**细分拍子**,并出现了多个细分。
|
||||
细分拍最早出现于`MD-1`,当时官方谱面没有官方名称,且最多仅有两个三角拍;后来第五章更新后三角拍首次出现在`5-1`并正式更名为**细分拍**,并出现了多个细分。
|
||||
|
||||
在修饰符中选择方块后,将细分数量设为大于 1 的值或者点击细分符号`△`,即可创建细分拍子。特殊音效的添加与方块单发拍子类似。最多可以将细分数量设置为 10 。
|
||||
在修饰符中选择方块后,将细分数量设为大于 1 的值或者点击细分符号`△`,即可创建细分拍。特殊音效的添加与方块单发拍类似。最多可以将细分数量设置为 10 。
|
||||
|
||||

|
||||
|
||||
@ -192,7 +192,7 @@ eb.AddOneshotBeat 1 2[type=subdivision,subdivision=4];
|
||||
eb.AddOneshotBeat 1 3[type=subdivision,subdivision=5];
|
||||
```
|
||||
|
||||
在护士提示方面,不同于方块单发拍子,细分拍子需要在出拍前的半拍长开始数拍提示。
|
||||
在护士提示方面,不同于方块单发拍,细分拍需要在出拍前的半拍长开始数拍提示。
|
||||
|
||||
```rdview 13
|
||||
eb.AddOneshotBeat 1[type=subdivision,subdivision=2];
|
||||
@ -219,13 +219,13 @@ g 8 1 1 1[offset=1]{
|
||||
|
||||

|
||||
|
||||
> 注意:非必要情况下,不要关闭方块单发拍子和细分拍子本身的声音。这对于仅靠听觉游玩的玩家而言是必要的。
|
||||
> 注意:非必要情况下,不要关闭方块单发拍和细分拍本身的声音。这对于仅靠听觉游玩的玩家而言是必要的。
|
||||
|
||||
### 单独的细分拍子
|
||||
### 单独的细分拍
|
||||
|
||||
跟 `MD-1` 一样,你可以通过 `Rea Dy Get Set Two~Ten` 来提示单独出现的细分 2 至细分 10 。
|
||||
|
||||
单独细分的提示**与正常单发拍的提示类似**,Rea Dy 或 Get Set 之间的间隔同样用于提示细分拍子的拍长,且数字提示**和 Go! 提示一样不需要提前**。
|
||||
单独细分的提示**与正常单发拍的提示类似**,Rea Dy 或 Get Set 之间的间隔同样用于提示细分拍的拍长,且数字提示**和 Go! 提示一样不需要提前**。
|
||||
|
||||
```rdview 14 3
|
||||
eb.AddOneshotBeat 3[type=subdivision,subdivision=2];
|
||||
@ -238,13 +238,13 @@ es.SayReadyGetSetGo_Set 7 1[];
|
||||
es.SayReadyGetSetGo_4 9 1[];
|
||||
```
|
||||
|
||||
## 冻结拍子🧊
|
||||
## 冻结拍🧊
|
||||
|
||||
**冻结拍子**会将单发拍子冻住,使下一拍相比正常按拍位置延后一些。
|
||||
**冻结拍**会将单发拍冻住,使下一拍相比正常按拍位置延后一些。
|
||||
|
||||
冻结拍子很早就存在于编辑器中,但尚未在官方关卡出现,第五章更新后终于在`5-2`首次露面,并且有了新的特效。
|
||||
冻结拍很早就存在于编辑器中,但尚未在官方关卡出现,第五章更新后终于在`5-2`首次露面,并且有了新的特效。
|
||||
|
||||
在修饰符中选中冰块符号`🧊`,就创建了一个冻结拍子。创建一个冻结拍子后,会多出“延迟”与“间隔”选项,同时相比于更新前,冻结拍子在编辑器内的样式也有所变化。
|
||||
在修饰符中选中冰块符号`🧊`,就创建了一个冻结拍。创建一个冻结拍后,会多出“延迟”与“间隔”选项,同时相比于更新前,冻结拍在编辑器内的样式也有所变化。
|
||||
|
||||

|
||||
|
||||
@ -253,25 +253,25 @@ eb.AddOneshotBeat 2[type=freezeshot,delay=0.5,interval=2];
|
||||
eb.AddOneshotBeat 5[type=freezeshot,delay=0.5,interval=2,tick=2];
|
||||
```
|
||||
|
||||
对于一个冻结拍子而言,一共有五个关键的时间点:左十字,右十字,出拍点(绿线),原按拍点(蓝线),实际按拍点(黄线)。
|
||||
对于一个冻结拍而言,一共有五个关键的时间点:左十字,右十字,出拍点(绿线),原按拍点(蓝线),实际按拍点(黄线)。
|
||||
|
||||
```rdview 4 2
|
||||
eb.AddOneshotBeat 2[type=freezeshot,delay=0.5,interval=2];
|
||||
```
|
||||
|
||||
- **左十字**和**右十字**会显示两次冰冻特效并分别播放不同的冰冻音效,用于预示拍子延长的时间。
|
||||
- **左十字**和**右十字**会显示两次冰冻特效并分别播放不同的冰冻音效,用于预示拍延长的时间。
|
||||
- **绿线**代表单发拍会在此响一次。
|
||||
- **蓝线**处会将人物冻成冰块,再显示一次冰冻特效并播放一次冰冻音效,表示拍子延长的开始。
|
||||
- **黄线**处拍子会解冻并播放最后一次冰冻音效,也是玩家应该按拍的时机。
|
||||
- **蓝线**处会将人物冻成冰块,再显示一次冰冻特效并播放一次冰冻音效,表示拍延长的开始。
|
||||
- **黄线**处拍会解冻并播放最后一次冰冻音效,也是玩家应该按拍的时机。
|
||||
- **绿线**与**蓝线**之间的间隔就是`拍长`的时间。
|
||||
- **左十字**与**右十字**或者**蓝线**与**黄线**之间的间隔就是`延迟`的时间。
|
||||
- **左十字**与**蓝线**或者**右十字**与**黄线**之间的间隔就是`间隔`的时间。
|
||||
- 以前由于冻结拍子尚不完善导致**绿线**不允许夹在**两个十字**之间,现在这种操作已经允许了。
|
||||
- 以前由于冻结拍尚不完善导致**绿线**不允许夹在**两个十字**之间,现在这种操作已经允许了。
|
||||
|
||||
若设计冻结拍子,还必须满足以下两个时间点正确:
|
||||
若设计冻结拍,还必须满足以下两个时间点正确:
|
||||
|
||||
- **蓝线**所在时间应在正常单发拍子的按拍位置上;
|
||||
- **左十字**必须和上一个普通单发拍子的按拍位置重合。
|
||||
- **蓝线**所在时间应在正常单发拍的按拍位置上;
|
||||
- **左十字**必须和上一个普通单发拍的按拍位置重合。
|
||||
|
||||
```rdview 5 3
|
||||
eb.AddOneshotBeat 1[];
|
||||
@ -280,32 +280,44 @@ eb.AddOneshotBeat 1 1[grayscale=100,offset_grayscale=80];
|
||||
eb.AddOneshotBeat 3 1[grayscale=100,offset_grayscale=80];
|
||||
```
|
||||
|
||||
## 灼热拍子🔥
|
||||
如果需要在冻结拍上叠加多个拍子来凸显鼓点,可以将他们的按拍点放在同一位置。
|
||||
|
||||
与**冻结拍子**相反,**灼热拍子**会形成一股热浪,使下一拍的按拍位置提前一些。
|
||||
```rdview 5 3
|
||||
eb.AddOneshotBeat 2[type=freezeshot,delay=0.5,interval=2];
|
||||
g 2 -1 2 2 #0000[offset=0 1]{
|
||||
eb.AddOneshotBeat 0.5 1[];
|
||||
g 0 -2 2 3 #0000[offset=0 1]{
|
||||
eb.AddOneshotBeat -1 3[tick=2.5];
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
第五章更新后,灼热拍子在`5-2N`首次出现。
|
||||
## 灼热拍🔥
|
||||
|
||||
在修饰符中选中火焰符号`🔥`,就创建了一个灼热拍子。创建一个灼热拍子后,会多出“间隔”选项。
|
||||
与**冻结拍**相反,**灼热拍**会形成一股热浪,使下一拍的按拍位置提前一些。
|
||||
|
||||
第五章更新后,灼热拍在`5-2N`首次出现。
|
||||
|
||||
在修饰符中选中火焰符号`🔥`,就创建了一个灼热拍。创建一个灼热拍后,会多出“间隔”选项。
|
||||
|
||||

|
||||
|
||||
类似地,对于一个灼热拍子,一共有四个关键的时间点:左十字,右十字,出拍点(绿线),按拍点。为作区分且方便表述,将会把按拍点称为红线。
|
||||
类似地,对于一个灼热拍,一共有四个关键的时间点:左十字,右十字,出拍点(绿线),按拍点。为作区分且方便表述,将会把按拍点称为红线。
|
||||
|
||||
```rdview 5 2
|
||||
eb.AddOneshotBeat 3[tick=0.5,type=burnshot,interval=2];
|
||||
```
|
||||
|
||||
- **左十字**和**右十字**会显示两次热浪特效并分别播放不同的灼热音效,用于预示拍子实际的时间。
|
||||
- **左十字**和**右十字**会显示两次热浪特效并分别播放不同的灼热音效,用于预示拍实际的时间。
|
||||
- **绿线**处会再显示一次热浪特效并播放一次灼热特效,同时单发拍会在此响一次。
|
||||
- **红线**处拍子会解除灼热状态并播放最后一次灼热音效,也是玩家应该按拍的时机。
|
||||
- **红线**处拍会解除灼热状态并播放最后一次灼热音效,也是玩家应该按拍的时机。
|
||||
- **左十字**与**右十字**或者**绿线**与**红线**之间的间隔就是`拍长`的时间。
|
||||
- **左十字**与**绿线**或者**右十字**与**红线**之间的间隔就是`间隔`的时间。
|
||||
|
||||
若设计灼热拍子,还必须满足以下两个时间点正确:
|
||||
若设计灼热拍,还必须满足以下两个时间点正确:
|
||||
|
||||
- **绿线**所在时间应在正常单发拍子的原定出拍位置上;
|
||||
- **左十字**必须和上一个普通单发拍子的原定出拍位置重合。
|
||||
- **绿线**所在时间应在正常单发拍的原定出拍位置上;
|
||||
- **左十字**必须和上一个普通单发拍的原定出拍位置重合。
|
||||
|
||||
```rdview 5 3
|
||||
eb.AddOneshotBeat 1[];
|
||||
@ -314,7 +326,19 @@ eb.AddOneshotBeat 1 1[grayscale=100,offset_grayscale=80];
|
||||
eb.AddOneshotBeat 3 1[grayscale=100,offset_grayscale=80];
|
||||
```
|
||||
|
||||
最后我们针对细分拍子、冻结拍子、灼热拍子做一个技术总结:
|
||||
如果需要在灼热拍上叠加多个拍子来凸显鼓点,可以将他们的按拍点放在同一位置。
|
||||
|
||||
```rdview 5 3
|
||||
eb.AddOneshotBeat 2[type=burnshot,delay=0.5,interval=2];
|
||||
g 0 -1 3 2 #0000[offset=0 1]{
|
||||
eb.AddOneshotBeat 1.5 1[tick=1.5];
|
||||
g 0 -1 3 3 #0000[offset=0 1]{
|
||||
eb.AddOneshotBeat 0.5 2[tick=2.5];
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
最后我们针对细分拍、冻结拍、灼热拍做一个技术总结:
|
||||
|
||||
```rdview 19 7
|
||||
eb.AddOneshotBeat 1[loop=1];
|
||||
@ -346,28 +370,28 @@ g 13 5 1 1[offset=1]{
|
||||
};
|
||||
```
|
||||
|
||||
## 冲击拍子
|
||||
## 冲击拍
|
||||
|
||||
**冲击拍子**属于一种单发拍子,但在通常情况下相比正常的单发拍而言更快,护士在喊口令的同时会伴有新的哨声提示。
|
||||
**冲击拍**属于一种单发拍,但在通常情况下相比正常的单发拍而言更快,护士在喊口令的同时会伴有新的哨声提示。
|
||||
|
||||
第五章更新后,冲击拍子在`5-X`首次出现。虽然`2-2`中最快的单发拍子也相当快,但并不属于冲击拍子。
|
||||
第五章更新后,冲击拍在`5-X`首次出现。虽然`2-2`中最快的单发拍也相当快,但并不属于冲击拍。
|
||||
|
||||
冲击拍子的本质是**护士提示带有哨声的单发拍**,**正拍按拍**以及**快速**是其显著特征,这两点在`5-X`中也有所体现。
|
||||
冲击拍的本质是**护士提示带有哨声的单发拍**,**正拍按拍**以及**快速**是其显著特征,这两点在`5-X`中也有所体现。
|
||||
|
||||
冲击拍子除了正常的护士提示之外,开始前后还会分别会伴随四声哨子,顺序分别为**短低短低**和**高高高高**,每声哨子之间的间隔相同,且四声哨子 - 高音效与前四下按拍重合,如下图上半部分。
|
||||
冲击拍除了正常的护士提示之外,开始前后还会分别会伴随四声哨子,顺序分别为**短低短低**和**高高高高**,每声哨子之间的间隔相同,且四声哨子 - 高音效与前四下按拍重合,如下图上半部分。
|
||||
|
||||
同时,仅当面临如下图下半部分特定的冲击像正常单发拍转化时,最后三个冲击拍子的按拍会伴随三声哨子,顺序分别为**高高低**。
|
||||
同时,仅当面临如下图下半部分特定的冲击像正常单发拍转化时,最后三个冲击拍的按拍会伴随三声哨子,顺序分别为**高高低**。
|
||||
|
||||

|
||||
|
||||

|
||||
*请注意,灰色的护士提示事件只是为了方便理解单发拍机制,实际只需要放置红色护士语音事件即可。*
|
||||
|
||||
虽然`5-X`引入了冲击拍子,但有几点仍需注意:
|
||||
1. **冲击拍子依旧是一种单发拍子**,其护士提示方式与正常拍长的单发拍基本无异,只不过在拍长较短时需要多加两个 Rea Dy 延长预先提示。
|
||||
2. **冲击拍子并没有正拍按拍以及高速度的强制要求**,只要是一组循环的单发拍子,无论正反拍都可以加上哨声提示当作冲击拍子使用,只需注意使用场景、合理性与便捷性。
|
||||
3. 哨声虽然是判定冲击拍子的指标,但是**这只是一种新的提示方式**,只是为了让玩家更好地应对单发拍,请勿为了创造冲击拍子而随意添加哨声堆砌提示,否则会显得相当冗杂。
|
||||
虽然`5-X`引入了冲击拍,但有几点仍需注意:
|
||||
1. **冲击拍依旧是一种单发拍**,其护士提示方式与正常拍长的单发拍基本无异,只不过在拍长较短时需要多加两个 Rea Dy 延长预先提示。
|
||||
2. **冲击拍并没有正拍按拍以及高速度的强制要求**,只要是一组循环的单发拍,无论正反拍都可以加上哨声提示当作冲击拍使用,只需注意使用场景、合理性与便捷性。
|
||||
3. 哨声虽然是判定冲击拍的指标,但是**这只是一种新的提示方式**,只是为了让玩家更好地应对单发拍,请勿为了创造冲击拍而随意添加哨声堆砌提示,否则会显得相当冗杂。
|
||||
|
||||
简言之,冲击拍子并不是什么新东西,只是加了哨子提示的单发拍子,仅此而已。尽管在`5-X`里其速度和正反按拍切换令人印象深刻,但只需像正常单发拍子一样使用即可。
|
||||
简言之,冲击拍并不是什么新东西,只是加了哨子提示的单发拍,仅此而已。尽管在`5-X`里其速度和正反按拍切换令人印象深刻,但只需像正常单发拍一样使用即可。
|
||||
|
||||
总的来说,冲击拍子只是为了符合`5-X`剧情而设计的机制,其提示方式相较于正常单发拍更为复杂,如果有需要可以添加哨声提示以创造出冲击拍子,但是只使用护士语音提示也是完全合理的,需根据个人需求进行选择。~~虽然我不推荐用就是了,提示整得那么麻烦还容易出错。~~
|
||||
总的来说,冲击拍只是为了符合`5-X`剧情而设计的机制,其提示方式相较于正常单发拍更为复杂,如果有需要可以添加哨声提示以创造出冲击拍,但是只使用护士语音提示也是完全合理的,需根据个人需求进行选择。~~虽然我不推荐用就是了,提示整得那么麻烦还容易出错。~~
|
||||
|
||||
@ -29,9 +29,9 @@
|
||||
|
||||
可写变量与只读变量类似,其参数可以随游戏进程变化,与只读变量不同的是,可写变量的值可人为更改。可写变量大致可分为三类:
|
||||
|
||||
> 1. **整型**(int):整型变量可以存储整数,变量名写作i0、i1、...、i9。
|
||||
> 2. **浮点型**(float):浮点型变量可以存储浮点数(也就是小数。特别地,形如1.0的值为浮点数),变量名写作f0、f1、...、f9。
|
||||
> 3. **布尔型**(boolean, 也可简写为 bool):布尔型变量可以存储布尔值。布尔值包含且仅包含True(真)和False(伪)。布尔型变量名写作b0、b1、...、b9。
|
||||
- **整型**(int):整型变量可以存储整数,变量名写作i0、i1、...、i9。
|
||||
- **浮点型**(float):浮点型变量可以存储浮点数(也就是小数。特别地,形如1.0的值为浮点数),变量名写作f0、f1、...、f9。
|
||||
- **布尔型**(boolean/bool):布尔型变量可以存储布尔值。布尔值包含且仅包含True(真)和False(伪)。布尔型变量名写作b0、b1、...、b9。
|
||||
|
||||
需要注意的是上述三类变量,每类有且仅有所列举的10个,且无法修改变量名。一般地,整形变量的值属于区间[-2147483648, 2147483647],而浮点型变量取值范围相对广泛。
|
||||
|
||||
@ -55,14 +55,24 @@
|
||||
| < | 小于 |
|
||||
| > | 大于 |
|
||||
|
||||
> 为了保留更高的兼容性,参与计算的数据都会转换为浮点数,也就意味着:
|
||||
> - int 和 bool 实际上都会转换为 float
|
||||
> - 转换为 int 的操作是四舍五入,并且偏好于最临近的偶数,例如:
|
||||
> - `i0 = 2.75` => i0: 3
|
||||
> - `i0 = 2.5` => i0: 2
|
||||
> - `i0 = 3.5` => i0: 4
|
||||
> - 转换为 bool 的操作是非 0 即为 True,例如:
|
||||
> - `b0 = -3` => b0: True
|
||||
> - `b0 = -0.0` => b0: False
|
||||
|
||||
变量可以在调用自定义方法;浮动文字、显示对话、显示状态牌;条件中使用。
|
||||
|
||||
> 1. **调用自定义方法**
|
||||
> 可以在调用自定义方法的表达式框里对变量进行读写、赋值,可使用赋值运算符。
|
||||
> 例如:i1++(使i1的值+1),i4=4(将i4的值赋为4)
|
||||
> 2. **浮动文字、显示对话、显示状态牌**
|
||||
> 变量可以嵌入到这些事件的显示内容中,使用时将表达式用大括号包裹起来,可使用算数运算符连接。
|
||||
> 例如:“武士有{i0}个朋友,洛根比武士多{i1}个朋友,所以洛根有{i0+i1}个朋友。”这句话在i0==4且i1==6时输出为“武士有4个朋友,洛根比武士多6个朋友,所以洛根有10个朋友。”
|
||||
> 3. **条件**
|
||||
> 变量可用于自定义类型条件的表达式框中。通常与比较运算符结合使用。
|
||||
> 例如:i0==10(i0等于10)、i5<i0(i5小于i0)
|
||||
- **调用自定义方法**
|
||||
可以在调用自定义方法的表达式框里对变量进行读写、赋值,可使用赋值运算符。
|
||||
例如:i1++(使i1的值+1),i4=4(将i4的值赋为4)
|
||||
- **浮动文字、显示对话、显示状态牌**
|
||||
变量可以嵌入到这些事件的显示内容中,使用时将表达式用大括号包裹起来,可使用算数运算符连接。
|
||||
例如:“武士有{i0}个朋友,洛根比武士多{i1}个朋友,所以洛根有{i0+i1}个朋友。”这句话在i0==4且i1==6时输出为“武士有4个朋友,洛根比武士多6个朋友,所以洛根有10个朋友。”
|
||||
- **条件**
|
||||
变量可用于自定义类型条件的表达式框中。通常与比较运算符结合使用。
|
||||
例如:i0==10(i0等于10)、i5\<i0(i5小于i0)
|
||||
@ -88,7 +88,6 @@ function plugin(hook, vm) {
|
||||
currentThemeModeIndex = parseInt(window.localStorage.getItem('currentThemeModeIndex'))
|
||||
}
|
||||
window.$docsify.currentThemeModeIndex = currentThemeModeIndex
|
||||
console.log(window.localStorage)
|
||||
setThemeMode(themeModes[currentThemeModeIndex])
|
||||
window.localStorage.setItem('currentThemeModeIndex', currentThemeModeIndex)
|
||||
if (window.$docsify.onLightDarkModeChange) {
|
||||
@ -118,7 +117,6 @@ function plugin(hook, vm) {
|
||||
window.$docsify.currentThemeModeIndex = currentThemeModeIndex
|
||||
setThemeMode(themeModes[currentThemeModeIndex])
|
||||
window.localStorage.setItem('currentThemeModeIndex', currentThemeModeIndex)
|
||||
console.log('currentThemeModeIndex', window.localStorage.getItem('currentThemeModeIndex'))
|
||||
if (window.$docsify.onLightDarkModeChange) {
|
||||
window.$docsify.onLightDarkModeChange();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user