diff --git a/index.html b/index.html index fc2d97f..eea4494 100644 --- a/index.html +++ b/index.html @@ -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 `
${escapeHtml(code)}
`; + return originalCodeRenderer ? originalCodeRenderer(code, lang) : `
${escapeHtml(code)}
`; }, image: function (src, title, alt) { - return `
${alt}${alt?`

${alt}

`:""}
`; + return `
${alt}${alt ? `

${alt}

` : ""}
`; }, } }, @@ -85,7 +86,7 @@ + - \ No newline at end of file diff --git a/pages/3rdparty_rdtk.md b/pages/3rdparty_rdtk.md index 96998cc..af9b866 100644 --- a/pages/3rdparty_rdtk.md +++ b/pages/3rdparty_rdtk.md @@ -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 ``` diff --git a/pages/changelog.md b/pages/changelog.md index 1a8a2c9..829237f 100644 --- a/pages/changelog.md +++ b/pages/changelog.md @@ -1,5 +1,10 @@ # 更新信息 +#### 2025-10-26 +- 文档补充 +- 修复代码块渲染异常 +- 首页添加互动模块引导 + #### 2025-10-18 - [自制角色与精灵资源](../pages/spritesheet.md)页添加了音效和表情命名规则相关内容。 diff --git a/pages/intro.md b/pages/intro.md index 2fcc81a..1a94d59 100644 --- a/pages/intro.md +++ b/pages/intro.md @@ -5,7 +5,11 @@ # 节奏医生中文编辑器教程 -> 此网页正在维护中。如有任何问题,欢迎指出。 +> 此网页正在维护中。 + 网页已开源至[此处](https://git.obugs.cn/RDCNWebs/rd.rdlevel.cn),欢迎投稿。 + +> 页面内的大部分事件栏板块包含点击互动。尝试点击以获得更生动的演示。 + 也可以在[此处](../pages/appendix_tools.md)游玩事件栏板块。 《节奏医生》编辑器中文教程旨在以教学的形式帮助您快速了解编辑器的界面,基础功能,设计技巧和做谱规范。 diff --git a/pages/moreclassicbeats.md b/pages/moreclassicbeats.md index 04929e0..b737f39 100644 --- a/pages/moreclassicbeats.md +++ b/pages/moreclassicbeats.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拍子,这样做它就相当于变回普通拍了。 ![](../images/moreclassicbeats-8beat.png) diff --git a/pages/moreoneshotbeats.md b/pages/moreoneshotbeats.md index 570612a..d5712f6 100644 --- a/pages/moreoneshotbeats.md +++ b/pages/moreoneshotbeats.md @@ -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 ,便创建了一个方块单发拍。方块单发拍出现时需要添加特殊音效,在方块单发拍的声音栏选择“特殊”即可自动添加提示音。 ![](../images/moreoneshotbeats-subdivision.png) -除此之外,方块单发拍子也需要护士提示。这种护士提示与普通单发拍子的提示类似,唯一的不同点在于最后的 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 。 ![](../images/moreoneshotbeats-amountofsubdivision.png) @@ -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]{ ![](../images/moreoneshotbeats-setnursesay.png) -> 注意:非必要情况下,不要关闭方块单发拍子和细分拍子本身的声音。这对于仅靠听觉游玩的玩家而言是必要的。 +> 注意:非必要情况下,不要关闭方块单发拍和细分拍本身的声音。这对于仅靠听觉游玩的玩家而言是必要的。 -### 单独的细分拍子 +### 单独的细分拍 跟 `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`首次露面,并且有了新的特效。 -在修饰符中选中冰块符号`🧊`,就创建了一个冻结拍子。创建一个冻结拍子后,会多出“延迟”与“间隔”选项,同时相比于更新前,冻结拍子在编辑器内的样式也有所变化。 +在修饰符中选中冰块符号`🧊`,就创建了一个冻结拍。创建一个冻结拍后,会多出“延迟”与“间隔”选项,同时相比于更新前,冻结拍在编辑器内的样式也有所变化。 ![](../images/moreoneshotbeats-freezeshot.png) @@ -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`首次出现。 + +在修饰符中选中火焰符号`🔥`,就创建了一个灼热拍。创建一个灼热拍后,会多出“间隔”选项。 ![](../images/moreoneshotbeats-burnshot.png) -类似地,对于一个灼热拍子,一共有四个关键的时间点:左十字,右十字,出拍点(绿线),按拍点。为作区分且方便表述,将会把按拍点称为红线。 +类似地,对于一个灼热拍,一共有四个关键的时间点:左十字,右十字,出拍点(绿线),按拍点。为作区分且方便表述,将会把按拍点称为红线。 ```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`中也有所体现。 -冲击拍子除了正常的护士提示之外,开始前后还会分别会伴随四声哨子,顺序分别为**短低短低**和**高高高高**,每声哨子之间的间隔相同,且四声哨子 - 高音效与前四下按拍重合,如下图上半部分。 +冲击拍除了正常的护士提示之外,开始前后还会分别会伴随四声哨子,顺序分别为**短低短低**和**高高高高**,每声哨子之间的间隔相同,且四声哨子 - 高音效与前四下按拍重合,如下图上半部分。 -同时,仅当面临如下图下半部分特定的冲击像正常单发拍转化时,最后三个冲击拍子的按拍会伴随三声哨子,顺序分别为**高高低**。 +同时,仅当面临如下图下半部分特定的冲击像正常单发拍转化时,最后三个冲击拍的按拍会伴随三声哨子,顺序分别为**高高低**。 ![](../images/moreoneshotbeats-blastbeat.png) ![](/images/13-23.png) *请注意,灰色的护士提示事件只是为了方便理解单发拍机制,实际只需要放置红色护士语音事件即可。* -虽然`5-X`引入了冲击拍子,但有几点仍需注意: -1. **冲击拍子依旧是一种单发拍子**,其护士提示方式与正常拍长的单发拍基本无异,只不过在拍长较短时需要多加两个 Rea Dy 延长预先提示。 -2. **冲击拍子并没有正拍按拍以及高速度的强制要求**,只要是一组循环的单发拍子,无论正反拍都可以加上哨声提示当作冲击拍子使用,只需注意使用场景、合理性与便捷性。 -3. 哨声虽然是判定冲击拍子的指标,但是**这只是一种新的提示方式**,只是为了让玩家更好地应对单发拍,请勿为了创造冲击拍子而随意添加哨声堆砌提示,否则会显得相当冗杂。 +虽然`5-X`引入了冲击拍,但有几点仍需注意: +1. **冲击拍依旧是一种单发拍**,其护士提示方式与正常拍长的单发拍基本无异,只不过在拍长较短时需要多加两个 Rea Dy 延长预先提示。 +2. **冲击拍并没有正拍按拍以及高速度的强制要求**,只要是一组循环的单发拍,无论正反拍都可以加上哨声提示当作冲击拍使用,只需注意使用场景、合理性与便捷性。 +3. 哨声虽然是判定冲击拍的指标,但是**这只是一种新的提示方式**,只是为了让玩家更好地应对单发拍,请勿为了创造冲击拍而随意添加哨声堆砌提示,否则会显得相当冗杂。 -简言之,冲击拍子并不是什么新东西,只是加了哨子提示的单发拍子,仅此而已。尽管在`5-X`里其速度和正反按拍切换令人印象深刻,但只需像正常单发拍子一样使用即可。 +简言之,冲击拍并不是什么新东西,只是加了哨子提示的单发拍,仅此而已。尽管在`5-X`里其速度和正反按拍切换令人印象深刻,但只需像正常单发拍一样使用即可。 -总的来说,冲击拍子只是为了符合`5-X`剧情而设计的机制,其提示方式相较于正常单发拍更为复杂,如果有需要可以添加哨声提示以创造出冲击拍子,但是只使用护士语音提示也是完全合理的,需根据个人需求进行选择。~~虽然我不推荐用就是了,提示整得那么麻烦还容易出错。~~ +总的来说,冲击拍只是为了符合`5-X`剧情而设计的机制,其提示方式相较于正常单发拍更为复杂,如果有需要可以添加哨声提示以创造出冲击拍,但是只使用护士语音提示也是完全合理的,需根据个人需求进行选择。~~虽然我不推荐用就是了,提示整得那么麻烦还容易出错。~~ diff --git a/pages/variable.md b/pages/variable.md index 3c907bd..ca9be79 100644 --- a/pages/variable.md +++ b/pages/variable.md @@ -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