Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b3579bbd07 | ||
|
|
3828811b3f | ||
|
|
a606de738a | ||
|
|
3c8733312c | ||
|
|
2b9a5a008c | ||
|
|
39c0db4373 | ||
|
|
05ae18d2ff | ||
|
|
a51b4fea03 | ||
|
|
98b5707c60 | ||
|
|
d6bbec8601 | ||
|
|
d62a6164a0 | ||
|
|
38fa5cffcc | ||
|
|
dfb2c9cf4e | ||
|
|
08b0b338b4 | ||
|
|
74a156ab43 | ||
|
|
e61c719989 | ||
|
|
a8162f59df | ||
|
|
74e4ec7ef3 | ||
|
|
58ee445c39 | ||
|
|
22ea4b8319 | ||
|
|
bfd781a545 | ||
|
|
661cf0ff74 | ||
|
|
3928730839 | ||
|
|
c446bd296c | ||
|
|
accc3e46cf | ||
|
|
54a4b7fdc1 | ||
|
|
b44f808592 | ||
|
|
d9f1b2c3a4 | ||
|
|
13ece539ec | ||
|
|
6f386c1cf2 | ||
|
|
867738bf7a | ||
|
|
f7dfd312d3 | ||
|
|
8b4877724e | ||
|
|
4e6cc59300 | ||
|
|
caf38e002f | ||
|
|
83da1be318 | ||
|
|
1425d1b512 | ||
|
|
cd72af4043 | ||
|
|
38010a85e9 | ||
|
|
e12b104c8b | ||
|
|
dac8579656 | ||
|
|
d125e827f3 | ||
|
|
76b48c3b95 | ||
|
|
479da74bfa | ||
|
|
05c3417439 | ||
|
|
fe639f79eb | ||
|
|
4014df39e5 | ||
|
|
8b55914845 | ||
|
|
ecb95f3e8e | ||
|
|
550045f5f8 | ||
|
|
ff60b5fe12 | ||
|
|
73ef185ba3 | ||
|
|
28fb3b4a88 | ||
|
|
757ce6b6ed | ||
|
|
d82f49dbec | ||
|
|
7f58583cff | ||
|
|
be23ad1d29 | ||
|
|
c7e9e3da13 | ||
|
|
c595870e06 | ||
|
|
3568004db6 | ||
|
|
93985cea1d | ||
|
|
c512c2ff3f | ||
|
|
9c6ef4e9e3 | ||
|
|
981b70c402 | ||
|
|
0f3bed36d9 | ||
|
|
850d7d8d0f | ||
|
|
42afb16b45 | ||
|
|
70feff6119 | ||
|
|
0ead33329e | ||
|
|
d6ed934b17 | ||
|
|
2a90886246 | ||
|
|
3e3bf39c2d | ||
|
|
d27a29e380 | ||
|
|
a974916f0e | ||
|
|
9f9717bc36 | ||
|
|
921df2e863 | ||
|
|
3e6434fe82 | ||
|
|
9477fa57e0 | ||
|
|
2cff4abbc2 | ||
|
|
072dea2b7b | ||
|
|
e49584a412 | ||
|
|
9f14397c63 | ||
|
|
fc1e839f48 | ||
|
|
b1f7dfe11d | ||
|
|
04d1af58f9 | ||
|
|
b5cbb3c588 | ||
|
|
68179a4d4d | ||
|
|
f19a7890ea | ||
|
|
345aca09ac | ||
|
|
659e01b30c | ||
|
|
3ff383764a | ||
|
|
99350e298c | ||
|
|
1a66c90022 | ||
|
|
76c272bfbe | ||
|
|
ccd55c84dd | ||
|
|
f9f067cc5f | ||
|
|
375193eec3 | ||
|
|
e67ec51cae | ||
|
|
c3068c312d | ||
|
|
0392d8f6ee | ||
|
|
81276cd83d | ||
|
|
9bc6730408 | ||
|
|
69e9535c68 | ||
|
|
484bad3ebc | ||
|
|
b53b86e9dc | ||
|
|
a21261ebca | ||
|
|
7ce70aff8f | ||
|
|
cf678ff1a2 | ||
|
|
4d28adc6a9 | ||
|
|
c28cf7605d | ||
|
|
72830302e8 | ||
|
|
7c229153a9 | ||
|
|
38a17ad35d | ||
|
|
4b842c721b | ||
|
|
70026114d8 | ||
|
|
455bb82550 | ||
|
|
1bff68aac5 | ||
|
|
6820dfc2ae | ||
|
|
7acdc7fed0 | ||
|
|
14f97502f0 | ||
|
|
6d3d02c5e2 | ||
|
|
0e26fea056 | ||
|
|
318f6bbcda | ||
|
|
a8c833c96f | ||
|
|
4a07b0eaf4 | ||
|
|
29b30c6782 | ||
|
|
b5b68b0c25 | ||
|
|
97a7697f66 | ||
|
|
6a2da287d8 | ||
|
|
922b5e1334 | ||
|
|
3a4ae62e66 | ||
|
|
594ffce2f1 | ||
|
|
a6a1420368 | ||
|
|
beb5385e25 | ||
|
|
64b612088c | ||
|
|
9336f789c1 | ||
|
|
c6ac6e5396 | ||
|
|
16207c03c5 | ||
|
|
67550f329d | ||
|
|
e115480491 | ||
|
|
1761283ca9 | ||
|
|
b6bec98286 | ||
|
|
12271b6943 | ||
|
|
a11aefd96d | ||
|
|
e92dc48e60 | ||
|
|
df07dde9c2 | ||
|
|
356893dcc3 | ||
|
|
b0d3f214d5 | ||
|
|
8bf2044e42 | ||
|
|
7eb77c3cba | ||
|
|
4d022a39de | ||
|
|
20e0f2b278 | ||
|
|
8140e2e156 | ||
|
|
ab1210ae23 | ||
|
|
dda3903f3f | ||
|
|
a1cb8f9adb | ||
|
|
1695f4ba59 | ||
|
|
64dc297141 | ||
|
|
0cf3e6a1d1 | ||
|
|
f8e616b048 | ||
|
|
daaf8c6604 | ||
|
|
e1aaae4067 | ||
|
|
4830fbf791 | ||
|
|
95e3205fcb | ||
|
|
c4f1e9190d | ||
|
|
9b2fefd482 | ||
|
|
34d10aacdc | ||
|
|
f6bb7c4656 | ||
|
|
f63a57d1b7 | ||
|
|
37843725da | ||
|
|
c3f78823a1 | ||
|
|
6088ac31a8 | ||
|
|
5fdf71d1e9 | ||
|
|
86bf9b876d | ||
|
|
36eec64a04 | ||
|
|
1d93e2140f | ||
|
|
a2f8775659 | ||
|
|
8bced361fe | ||
|
|
4c493ca9b3 | ||
|
|
e75daf1b5e | ||
|
|
a4531febd3 | ||
|
|
74c9014c5f | ||
|
|
d1d5926747 | ||
|
|
fa8dbd7d27 | ||
|
|
14975bc31c | ||
|
|
c8d61ba5b7 | ||
|
|
bd7480e686 | ||
|
|
852d8e719d | ||
|
|
e1dc15a5a7 | ||
|
|
5e426d9261 | ||
|
|
e7646d59b5 | ||
|
|
4463ba1b87 | ||
|
|
1115099a29 | ||
|
|
449d800bae | ||
|
|
ec2ab12898 | ||
|
|
f2b0c3a33e | ||
|
|
46fbe848d3 | ||
|
|
5555e612b3 | ||
|
|
e23b6000c4 | ||
|
|
c8bc990412 | ||
|
|
aedf303e89 | ||
|
|
6a433657f6 | ||
|
|
64fe405d2e | ||
|
|
f18d0974ac | ||
|
|
51207f501f | ||
|
|
4d7e2961f8 | ||
|
|
a26095bea2 | ||
|
|
a6711f859f | ||
|
|
d6e5ff39e3 | ||
|
|
f315aa9f2e | ||
|
|
92a39d05ad | ||
|
|
2792202ac5 | ||
|
|
1d8825da77 | ||
|
|
f4dee6f3c6 | ||
|
|
7300fbfa16 | ||
|
|
8486bd807e | ||
|
|
41ada2cf46 | ||
|
|
8ee381909f | ||
|
|
ae9c93deb2 | ||
|
|
d922a6fae6 | ||
|
|
006e2f2ff1 | ||
|
|
c14a85c464 | ||
|
|
5aedbbfbe0 | ||
|
|
a14b4436f5 | ||
|
|
4e1e57b08e | ||
|
|
51e8b1f449 | ||
|
|
11846eb83e | ||
|
|
2b3e6404a4 | ||
|
|
f5e8b6d6f4 | ||
|
|
758645041b | ||
|
|
fb2e0e124b | ||
|
|
006a5fe4f5 | ||
|
|
1e4e94cce7 | ||
|
|
1024b31790 | ||
|
|
22558c6813 | ||
|
|
55c53278ea | ||
|
|
089f4c551d | ||
|
|
9a060eb6ff | ||
|
|
6b0da44786 | ||
|
|
50bef7ba6d | ||
|
|
6f8e88b93d | ||
|
|
0fecdf5b19 | ||
|
|
f51785f649 | ||
|
|
c1b00aa34d | ||
|
|
a01042af6a | ||
|
|
9d14a88a98 | ||
|
|
9714689690 | ||
|
|
dca868ac71 | ||
|
|
81b54f7fbd | ||
|
|
c467825ec1 | ||
|
|
91fed78ce1 | ||
|
|
9becdf3f88 | ||
|
|
547181bff1 | ||
|
|
052463645b | ||
|
|
2d6125b082 | ||
|
|
69165da834 | ||
|
|
90a764dd7f | ||
|
|
7c888f5249 | ||
|
|
214b7856bd | ||
|
|
d83cc5a829 | ||
|
|
837336a321 | ||
|
|
62c9b8517f | ||
|
|
7921ecc981 | ||
|
|
745dbaee3e | ||
|
|
e28eea0a77 | ||
|
|
517c75bb66 | ||
|
|
10db121ad7 | ||
|
|
d51204985f | ||
|
|
bc7518ba0b | ||
|
|
a0d296a818 | ||
|
|
bb0cb7de3a | ||
|
|
ae32b0e7aa | ||
|
|
dca2f87b4b | ||
|
|
7aa95ab0ba | ||
|
|
7a2e16d714 | ||
|
|
f588b3ce92 | ||
|
|
5d7d99b24c |
@@ -1,12 +1,32 @@
|
||||
# 节奏医生中文编辑器教程网站
|
||||
|
||||
## 预览和编辑
|
||||
## 预览
|
||||
|
||||
### [Visual Studio Code](https://code.visualstudio.com/)
|
||||
|
||||
此项目基于 [docsify](https://docsify.js.org/#/) 编辑,并使用 [RDView](https://github.com/OLDRedstone/RDView) 显示编辑器可交互模块。
|
||||
此项目基于 [docsify](https://docsify.js.org/#/) 编辑,并使用 [RDView](https://github.com/OLDRedstone/RDView) 和 [RhythmBase.View(RDTKView)](https://github.com/OLDRedstone/RhythmBase.View) 显示编辑器可交互模块。
|
||||
可以参考以下多种方案预览编辑效果。
|
||||
|
||||
- 确保 [安装 markdown-rdview-support](https://github.com/OLDRedstone/markdown-rdview-support) 即可预览 RDView 内容。
|
||||
- [安装 docsify](https://docsify.js.org/#/quickstart) 以实时预览页面。
|
||||
|
||||
```bash
|
||||
npm i docsify-cli -g
|
||||
```
|
||||
|
||||
- 运行以下命令以启动本地服务器实时预览。
|
||||
|
||||
```bash
|
||||
docsify s
|
||||
```
|
||||
|
||||
- 在 Visual Studio Code 插件商店[安装 Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) 以预览。
|
||||
|
||||
### RDView
|
||||
|
||||
> ### 此条目即将废弃。
|
||||
> 请优先使用 RhythmBase.View 格式。
|
||||
|
||||
- [安装 markdown-rdview-support](https://github.com/OLDRedstone/markdown-rdview-support) 以预览 RDView 内容。
|
||||
如果成功安装,那么以下内容的 markdown 预览应当是一个事件栏。
|
||||
|
||||
```rdview 7 5 1
|
||||
@@ -15,16 +35,18 @@ es.SetCrotchetsPerBar_4 0 1[];
|
||||
eb.AddClassicBeat 0 2[tick=6];
|
||||
```
|
||||
|
||||
- 确保 [安装 docsify](https://docsify.js.org/#/quickstart) 以实时预览页面。
|
||||
### RhythmBase.View
|
||||
|
||||
```bash
|
||||
npm i docsify-cli -g
|
||||
```
|
||||
RDView 的替代。
|
||||
可以直接使用关卡文件内格式进行展示。
|
||||
暂无计划支持 Visual Studio Code 内预览。(~~感觉没必要支持~~)
|
||||
可以访问[此处](https://view.obugs.cn/)以预览效果和获得额外属性说明。
|
||||
|
||||
- 运行以下命令以启动本地服务器实时预览。
|
||||
## 编辑
|
||||
|
||||
```bash
|
||||
docsify s
|
||||
```
|
||||
请尽量使用 [RhythmBase.View(RDTKView)](https://github.com/OLDRedstone/RhythmBase.View) 格式展示事件。
|
||||
本教程后期将会逐步迁移模块指此格式。
|
||||
|
||||
## 其他
|
||||
|
||||
Game assets courtesy of [7th Beat Games](https://7thbe.at/). Game assets are excluded from this site's license.
|
||||
@@ -4,6 +4,7 @@
|
||||
margin: 0;
|
||||
& img{
|
||||
image-rendering: pixelated;
|
||||
width: 64px;
|
||||
height: 32px;
|
||||
}
|
||||
}
|
||||
@@ -11,23 +12,22 @@
|
||||
|
||||
- [<img src="/indexicon/Intro.png"/><p>序</p>](/pages/intro.md)
|
||||
- [<img src="/indexicon/changelog.png"/><p>更新信息</p>](/pages/changelog.md)
|
||||
- 入门:基础
|
||||
- [<img src="/indexicon/changegameversion.png"/><p>修改游戏版本</p>](/pages/changegameversion.md)
|
||||
- [<img src="/indexicon/importandexport.png"/><p>导入与导出</p>](/pages/importandexport.md)
|
||||
- [<img src="/indexicon/createbuiltincharacter.png"/><p>创建游戏内置角色</p>](/pages/createbuiltincharacter.md)
|
||||
- 基础:熟悉编辑器
|
||||
- [<img src="/indexicon/changegameversion.png"/><p>修改游戏配置</p>](/pages/changegameversion.md)
|
||||
- [<img src="/indexicon/editorinterface.png"/><p>编辑器界面与快捷键</p>](/pages/editorinterface.md)
|
||||
- 入门:基础机制
|
||||
- [<img src="/indexicon/importandexport.png"/><p>导入与导出</p>](/pages/importandexport.md)
|
||||
- 基础:游戏机制
|
||||
- [<img src="/indexicon/createbuiltincharacter.png"/><p>创建游戏内置角色</p>](/pages/createbuiltincharacter.md)
|
||||
- [<img src="/indexicon/classicbeat.png"/><p>普通拍子</p>](/pages/classicbeat.md)
|
||||
- [<img src="/indexicon/oneshotbeat.png"/><p>单发拍子</p>](/pages/oneshotbeat.md)
|
||||
- [<img src="/indexicon/holdbeat.png"/><p>长按</p>](/pages/holdbeat.md)
|
||||
- 基础:文字
|
||||
- [<img src="/indexicon/floatingtext.png"/><p>浮动文字</p>](/pages/floatingtext.md)
|
||||
- [<img src="/indexicon/captions.png"/><p>其他文字事件</p>](/pages/captions.md)
|
||||
- 基础:轨道特效
|
||||
- 基础:基本特效
|
||||
- [<img src="/indexicon/moverow.png"/><p>轨道移动</p>](/pages/moverow.md)
|
||||
- [<img src="/indexicon/settheme.png"/><p>场景与主题</p>](/pages/settheme.md)
|
||||
- [<img src="/indexicon/rowfx.png"/><p>轨道视效</p>](/pages/rowfx.md)
|
||||
- 进阶:节奏设计
|
||||
- [<img src="/indexicon/settheme.png"/><p>场景与主题</p>](/pages/settheme.md)
|
||||
- [<img src="/indexicon/captions.png"/><p>文字事件</p>](/pages/captions.md)
|
||||
- [<img src="/indexicon/vfx.png"/><p>视觉效果</p>](/pages/vfx.md)
|
||||
- 进阶:关卡设计
|
||||
- [<img src="/indexicon/moreclassicbeats.png"/><p>普通拍的衍生节奏型</p>](/pages/moreclassicbeats.md)
|
||||
- [<img src="/indexicon/moreoneshotbeats.png"/><p>单发拍的衍生节奏型</p>](/pages/moreoneshotbeats.md)
|
||||
- [<img src="/indexicon/beatpatterndesign.png"/><p>采音和节奏设计</p>](/pages/beatpatterndesign.md)
|
||||
@@ -36,15 +36,12 @@
|
||||
- [<img src="/indexicon/twoplayers.png" width="64px"/><p>双人模式设计</p>](/pages/twoplayers.md)
|
||||
- [<img src="/indexicon/accessibledesign.png"/><p>无障碍设计</p>](/pages/accessibledesign.md)
|
||||
- 进阶:视觉特效
|
||||
- [<img src="/indexicon/room.png"/><p>房间</p>](/pages/room.md)
|
||||
- [<img src="/indexicon/camera.png"/><p>镜头移动</p>](/pages/camera.md)
|
||||
- [<img src="/indexicon/roomfx.png"/><p>房间视效</p>](/pages/roomfx.md)
|
||||
- [<img src="/indexicon/camerafx.png"/><p>镜头带来的额外视效</p>](/pages/camerafx.md)
|
||||
- [<img src=""/><p>视觉干扰</p>](/pages/vfxpro.md)
|
||||
- [<img src="/indexicon/hallofmirror.png"/><p>镜厅</p>](/pages/hallofmirror.md)
|
||||
- [<img src="/indexicon/vfx.png"/><p>视觉干扰</p>](/pages/vfx.md)
|
||||
- [<img src="/indexicon/windowmove.png"/><p>窗口移动</p>](/pages/windowmove.md)
|
||||
- [<img src="/indexicon/windowmove.png"/><p>窗口相关的动画</p>](/pages/WindowDance.md)
|
||||
- [<img src="/indexicon/hand.png"/><p>手</p>](/pages/hand.md)
|
||||
- 进阶:自制素材
|
||||
- [<img src="/indexicon/character.png"/><p>自制角色与精灵资源</p>](/pages/spritesheet.md)
|
||||
- [<img src="/indexicon/decoration.png"/><p>使用精灵</p>](/pages/decoration.md)
|
||||
- [<img src="/indexicon/assets.png"/><p>场景资源</p>](/pages/assets.md)
|
||||
@@ -52,10 +49,12 @@
|
||||
- [<img src="/indexicon/tag.png"/><p>标签</p>](/pages/tag.md)
|
||||
- [<img src="/indexicon/custommethod.png"/><p>自定义方法</p>](/pages/custommethod.md)
|
||||
- [<img src="/indexicon/condition.png"/><p>条件</p>](/pages/condition.md)
|
||||
- [<img src="/indexicon/variable.png"/><p>变量</p>](/pages/variable.md)
|
||||
- [<img src="/indexicon/variable.png"/><p>表达式</p>](/pages/expression.md)
|
||||
- [<img src="/indexicon/setplaystyleandgotolevel.png"/><p>关卡播放与跳转<p>](/pages/setplaystyleandgotolevel.md)
|
||||
- 高级:第三方工具
|
||||
- [<img src="/indexicon/3rdparty_coderd.png"/><p>[Python]CodeRD</p>](/pages/3rdparty_coderd.md)
|
||||
- [<img src="/indexicon/3rdparty_rdtk.png"/><p>[C#]RhythmBase</p>](/pages/3rdparty_rdtk.md)
|
||||
- [<img src="" width="64px"/><p>[lua]AserDeco插件</p>](/pages/3rdparty_aserdeco.md)
|
||||
- 附录
|
||||
- [<img src="/indexicon/events.png"/><p>事件列表</p>](/pages/appendix_events.md)
|
||||
- [<img src="/indexicon/vfxs.png"/><p>预设特效列表</p>](/pages/appendix_vfxs.md)
|
||||
|
||||
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 164 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 701 KiB |
|
After Width: | Height: | Size: 639 KiB |
|
After Width: | Height: | Size: 609 KiB |
|
After Width: | Height: | Size: 555 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 244 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 216 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 92 KiB |
@@ -1,29 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-cn">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>节奏医生编辑器教程</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta
|
||||
name="description"
|
||||
content="这里是关于节奏医生编辑器的中文完全指南!"
|
||||
>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
|
||||
<link rel="stylesheet" href="/style/light.css">
|
||||
<link rel="stylesheet" href="/style/dark.css">
|
||||
<link rel="stylesheet" href="/style/color.css">
|
||||
<link rel="stylesheet" href="/style/rdview.css">
|
||||
<link rel="stylesheet" href="/style/otto.css">
|
||||
<link rel="stylesheet" href="/style/special.css">
|
||||
</head>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>节奏医生编辑器教程</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="description" content="Description">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
|
||||
<link rel="stylesheet" href="/style/light.css">
|
||||
<link rel="stylesheet" href="/style/dark.css">
|
||||
<link rel="stylesheet" href="/style/color.css">
|
||||
<link rel="stylesheet" href="/style/rdview.css">
|
||||
<link rel="stylesheet" href="/style/otto.css">
|
||||
<link rel="stylesheet" href="/style/special.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">加载中...</div>
|
||||
<script>
|
||||
$docsify = {
|
||||
name: '节奏医生编辑器教程',
|
||||
<body>
|
||||
<div id="app">加载中...</div>
|
||||
<script>
|
||||
$docsify = {
|
||||
name: "节奏医生编辑器教程",
|
||||
notFoundPage: "/404.md",
|
||||
homepage: '/pages/intro.md',
|
||||
homepage: "/pages/intro.md",
|
||||
loadSidebar: true,
|
||||
loadNavbar: true,
|
||||
coverpage: false,
|
||||
@@ -31,62 +33,86 @@
|
||||
subMaxLevel: 4,
|
||||
mergeNavbar: true,
|
||||
};
|
||||
</script>
|
||||
<script type="module">
|
||||
import '/script/rdview.js';
|
||||
function escapeHtml(unsafe) {
|
||||
return unsafe
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
loadRDView()
|
||||
const originalCodeRenderer = $docsify.markdown?.renderer?.code;
|
||||
$docsify = {
|
||||
...$docsify,
|
||||
...{
|
||||
markdown: {
|
||||
renderer: {
|
||||
code: function (code, lang) {
|
||||
if (lang.trim().startsWith('rdview')) {
|
||||
return RDViewRender(lang, code);
|
||||
}
|
||||
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>`;
|
||||
},
|
||||
}
|
||||
},
|
||||
switchLightDarkMode: {
|
||||
useSwitchMode: true,
|
||||
top: 130,
|
||||
right: 26,
|
||||
svgColor: '#7d7b75',
|
||||
},
|
||||
search: {
|
||||
noData: {
|
||||
'/': '没有找到结果!'
|
||||
},
|
||||
paths: 'auto',
|
||||
placeholder: {
|
||||
'/': '搜索'
|
||||
},
|
||||
hideOtherSidebarContent: true,
|
||||
},
|
||||
</script>
|
||||
<script type="module">
|
||||
import "./script/rdview.js";
|
||||
import {render} from "./script/rdtkview_render.js";
|
||||
|
||||
function escapeHtml(unsafe) {
|
||||
return unsafe
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="/script/docsify.min.js"></script>
|
||||
<script src="/script/zoom-image.min.js"></script>
|
||||
<script src="/script/search.min.js"></script>
|
||||
<script src="/script/emoji.min.js"></script>
|
||||
<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>
|
||||
loadRDView();
|
||||
const originalCodeRenderer = $docsify.markdown
|
||||
?.renderer?.code;
|
||||
function codeblockRender(code, lang) {
|
||||
if (lang.trim().startsWith("rdview")) {
|
||||
return RDViewRender(lang, code);
|
||||
}
|
||||
// else if (lang.trim().startsWith("rdtkview")) {
|
||||
// const args = lang.slice(8).trim().split(" ");
|
||||
// const width = parseInt(args[0]) || 8;
|
||||
// const height = parseInt(args[1]) || 4;
|
||||
// const scale = parseFloat(args[2]) || 2.0;
|
||||
// const result = render(code, width, height, scale);
|
||||
// result.toString = () => result;
|
||||
// return result;
|
||||
// }
|
||||
return originalCodeRenderer
|
||||
? originalCodeRenderer(code, lang)
|
||||
: `<pre data-lang="${lang}"><code>${
|
||||
escapeHtml(code)
|
||||
}</code></pre>`;
|
||||
}
|
||||
$docsify = {
|
||||
...$docsify,
|
||||
...{
|
||||
markdown: {
|
||||
renderer: {
|
||||
code: (code, lang) => {
|
||||
return codeblockRender(code, lang);
|
||||
},
|
||||
image: function (src, title, alt) {
|
||||
return `<div class="image-tip"><img class="medium-zoom-image" src="${src}" alt="${alt}">${
|
||||
alt ? `<p>${alt}</p>` : ""
|
||||
}</div>`;
|
||||
},
|
||||
},
|
||||
},
|
||||
switchLightDarkMode: {
|
||||
useSwitchMode: true,
|
||||
top: 130,
|
||||
right: 26,
|
||||
svgColor: "#7d7b75",
|
||||
},
|
||||
search: {
|
||||
noData: {
|
||||
"/": "没有找到结果!",
|
||||
},
|
||||
paths: "auto",
|
||||
placeholder: {
|
||||
"/": "搜索",
|
||||
},
|
||||
hideOtherSidebarContent: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<script type="module" src="./script/special.js"></script>
|
||||
<!-- <script src="/script/docsify.min.js"></script> -->
|
||||
<script src="/script/zoom-image.min.js"></script>
|
||||
<script src="/script/search.min.js"></script>
|
||||
<script src="/script/emoji.min.js"></script>
|
||||
<!-- <script src="/script/docsify-copy-code.min.js"></script> -->
|
||||
<script src="/script/switchLightDarkMode.js"></script>
|
||||
<script src="/script/otto.js"></script>
|
||||
<script src="/script/custommethod-search.js"></script>
|
||||
<!-- <script
|
||||
src="https://cdn.jsdelivr.net/npm/prismjs@1/components/prism-yaml.js"
|
||||
></script> -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
After Width: | Height: | Size: 581 B |
|
After Width: | Height: | Size: 705 B |
|
After Width: | Height: | Size: 691 B |
@@ -0,0 +1,29 @@
|
||||
# AserDeco
|
||||
|
||||
AserDeco 是一个 [Aseprite](https://www.aseprite.org/) 插件,用于将已有的 Aseprite 工程文件导出为节奏医生可以使用的精灵图文件。
|
||||
|
||||
## 下载
|
||||
可以在[这里](https://github.com/OLDRedstone/Aserdecoration/releases/)下载到最新版的 AserDeco 插件。
|
||||
|
||||
## 安装:
|
||||
|
||||
**双击 .aseprite-extension 文件**或**依次点击**`编辑-首选项-扩展-添加扩展`以安装。
|
||||
|
||||
若需要更改语言,依次点击`窗口-更改 Aserdecoration 的语言`,之后以上述方法重启插件。
|
||||
|
||||
## 使用
|
||||
|
||||
在 Aseprite 里制作精灵图时,
|
||||
|
||||
1. 选择需要导出的 Aseprite 工程文件,
|
||||
1. 调整帧持续时间(可选),
|
||||
1. 创建循环节,
|
||||
1. 选择多个帧,
|
||||
1. 右键帧序号,
|
||||
1. 选择`设置循环节`,
|
||||
1. 将循环节名称设置为精灵图表情名称,
|
||||
1. 调整循环节参数,
|
||||
1. 保存文件,
|
||||
1. 依次点击`文件-导出...-导出节奏医生精灵图`以弹出导出对话框,
|
||||
|
||||
插件将会以**循环节名称**创建精灵表情,并以**循环节的动画方向**、**帧的持续时(可选)**和**对话框内的参数**在**已打开的 Aseprite 工程文件同一位置**处创建与工程文件同名的精灵图 .png 和 .json 文件。
|
||||
@@ -101,7 +101,7 @@ metadata:
|
||||
|
||||
- 对于 落雨/JPEG失真/马赛克/海底波浪/电影噪点/暴风雪/素描/色像差/模糊/径向模糊/色调偏移:强度,缓速时长,缓速
|
||||
|
||||
- 对于 自定义屏幕块/自定义滚屏:x/y
|
||||
- 对于 自定义屏幕分隔/屏幕滚动:x/y
|
||||
|
||||
- 对于 高光:阈值,强度,颜色,缓速时长,缓速
|
||||
|
||||
|
||||
@@ -0,0 +1,241 @@
|
||||
# 窗口相关的动画
|
||||
|
||||
在1.0正式版更新后,窗口被单独提取成了一个独立的板块:**窗口板块**。为了避免剧透,这个板块默认是隐藏的,要让这个板块显示出来,我们需要在动作板块先放一个窗口动效事件,或者在编辑器设置中的显示窗口标签栏设置为**总是报告**,这个板块才会显示出来。
|
||||
|
||||

|
||||
|
||||
我们可以看到,窗口事件比以前多了很多。而且4个窗口都像房间板块一样每个窗口都占了一行。所有事件都只会对其所在行对应的窗口生效。接下来将会介绍这些事件的作用和使用方法。
|
||||
|
||||
## 隐藏窗口
|
||||
|
||||
窗口的显示和隐藏都在这个事件中,窗口默认只有窗口1是显示,其他窗口默认都是隐藏的,所以如果你需要操作其他窗口,需要把窗口显示出来再进行操作。
|
||||
|
||||
如果需要使用透明窗口,记得把背景颜色设置为透明(顶部的背景也要)
|
||||
|
||||
窗口板块中隐藏状态的窗口会显示灰色,可以通过这个判断你的窗口有没有忘记显示出来。
|
||||
|
||||

|
||||
|
||||
## 窗口动效
|
||||
|
||||
### 移动
|
||||
|
||||
移动跟**移动房间**事件一样,坐标填多少就移动到哪。
|
||||
|
||||

|
||||
|
||||
需要注意的是参照,影响的是窗口移动的范围,这两个选项的具体情况如下:
|
||||
|
||||
`居中`的范围是整个屏幕,如果将位置设置为(0,0),那么窗口只会露出一个角;
|
||||
|
||||
`边缘`的范围是整个屏幕减去窗口大小,如果将位置设置为(0,0),那么窗口的左下角将对齐屏幕左下角。
|
||||
|
||||

|
||||
|
||||
### 摇摆
|
||||
|
||||
使窗口按特定速度和方向来回移动。
|
||||
|
||||
**位置:** 初始位置;
|
||||
|
||||
**增幅:** 移动的幅度;
|
||||
|
||||
**角度:** 来回移动的方向,0度为向右;
|
||||
|
||||
**频率:** 每拍移动多少次;
|
||||
|
||||
**运动缓速:** 每次移动时用的缓速;
|
||||
|
||||
**缓速类型:** 偶数次移动可以设置成相同的缓速或者镜像(如从快到慢镜像后就是从慢到快)。
|
||||
|
||||

|
||||
|
||||
### 缠绕
|
||||
|
||||
像缠胶带一样将窗口绕着屏幕旋转。
|
||||
|
||||
**位置:** 初始位置;
|
||||
|
||||
**速度:** 每拍移动多少距离(一圈的百分之n);
|
||||
|
||||
**增幅:** 往另一个方向`摇摆`的距离(与移动方向垂直);
|
||||
|
||||
**角度:** 移动的方向,0度为向右;
|
||||
|
||||
**频率:** `摇摆`的频率(每拍移动多少次)。
|
||||
|
||||

|
||||
|
||||
### 椭圆
|
||||
|
||||
将窗口绕着一点旋转。
|
||||
|
||||
**位置:** 旋转中心;
|
||||
|
||||
**速度:** 每拍转多少度`(360° * n%)`;
|
||||
|
||||
**使用循环:** 文本
|
||||
|
||||
**增幅:** X轴和Y轴方向分别远离这个点多远;
|
||||
|
||||
**角度:** 从哪个角度开始旋转。
|
||||
|
||||

|
||||
|
||||
### 震动
|
||||
|
||||
震动窗口,跟震动摄像机一样。
|
||||
|
||||
**位置:** 初始位置;
|
||||
|
||||
**增幅:** 震动时X轴和Y轴方向最远能到哪;
|
||||
|
||||
**频率:** 每拍震动多少次;
|
||||
|
||||
**周期:** 每多少拍震动的移动会重复;
|
||||
|
||||
**运动缓速:** 每次震动时移动的缓速。
|
||||
|
||||

|
||||
|
||||
|
||||
时长和缓速前面都说过了,就不再提了。
|
||||
|
||||
> 如果你想直观地看看各种移动方式的速度区别,可以[看看这里](https://easings.net/zh-cn)。
|
||||
|
||||
|
||||
## 窗口大小重置
|
||||
|
||||
想要让窗口大小发生变化,或调整窗口的轴点,都需要借助**窗口大小重置**事件。这个事件的设置项目是这样的:
|
||||
|
||||

|
||||
|
||||
**大小:** 窗口的目标大小,最大可以设置为`200%, 200%`,如果`x`和`y`同时被设置为了0,则窗口会立刻被重置为初始的大小(即`100%, 100%`)。
|
||||
|
||||
**缩放模式:** 窗口大小发生变化时内容的缩放模式,具体如下:
|
||||
<ul>
|
||||
<li><strong>填充:</strong>将画面中的内容尽可能的填满窗口</li>
|
||||
<li><strong>适应:</strong>将画面中的内容尽可能放进窗口</li>
|
||||
<li><strong>无:</strong>保持窗口中原来内容的大小不变</li>
|
||||
</ul>
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
> 如果你的窗口在大小发生变化前后长宽比不变,那么**填充**和**适应**在效果上没有区别。
|
||||
|
||||
**轴点模式:** 有**默认**和**锚点边缘**两种模式,选择**默认**即和房间移动的轴点没有区别,选择**锚点边缘**则表示选择一条边缘固定不动的情况下进行大小的缩放。
|
||||
|
||||
> 实际上选择锚点边缘的情况下就是由系统计算轴点的位置,因此在锚点边缘选择左或右时不要把`x`设置为`0%`,在锚点边缘选择上或下时不要把`y`设置为`0%`,否则会出现bug,表现为对应窗口会消失且**无法被任何方式**移动回来,即使通过事件恢复了窗口的大小和轴点。
|
||||
|
||||
**轴点:** 设置位置和缩放的基准点,类似于精灵图和房间的轴点,此处不再赘述。
|
||||
|
||||
**动画时长和缓速:** 见过多次了,不再赘述。
|
||||
|
||||
> 如果你想直观地看看各种移动方式的速度区别,可以[看看这里](https://easings.net/zh-cn)。
|
||||
|
||||
### 轴点的使用技巧
|
||||
|
||||
我们知道,在窗口大小发生变化时,调整轴点可以改变其缩放的中心。但是实际上,即使窗口不需要缩放,我们也可以通过调整轴点来改变窗口的位置,那么这种操作从效果上看和直接使用窗口移动看似没有什么区别,实际上在一些特殊的需求中,这个方法可以被很巧妙地使用。
|
||||
|
||||
窗口在移动时,使用的坐标是相对整个屏幕的,而由于不同设备的屏幕分辨率不同,导致有些效果如果用窗口移动来做会在不同分辨率下有不同效果,尤其是当多个窗口之间的位置有配合的时候(如两个窗口紧贴的效果)。
|
||||
|
||||
如在16:9的分辨率下制作的两个窗口紧挨着的效果:
|
||||
|
||||

|
||||
|
||||
在其他分辨率下,即使不改变窗口的位置,也可能会有不同的效果(如在22:9分辨率下):
|
||||
|
||||

|
||||
|
||||
如果想要做出在类似`2-XN`中两个窗口相撞的效果,窗口中间有距离会导致表演效果大打折扣。这时我们可能会想,能不能不以屏幕为基准定位,而是以窗口的大小为基准定位,是不是就可以做到了呢?
|
||||
|
||||
事实上,**轴点**就解决了这样的问题。
|
||||
|
||||
试想,如果两个窗口在同一个位置,而一个窗口的轴点在左边缘,另一个窗口在右边缘,就可以保证无论在什么样的分辨率下,这两个窗口都一定是紧挨着的。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
所以当你的动画需要多个窗口之间的位置配合时,不妨试试用轴点的移动来代替直接移动窗口。
|
||||
|
||||
## 设置窗口内容
|
||||
|
||||
~~这个事件以前翻译错误,译成了**设置窗口数量**,害人不浅。~~
|
||||
|
||||
这个事件的设置项目是这样的:
|
||||
|
||||

|
||||
|
||||
**内容模式:** 可以选择**一个房间**或**全部房间**,在选择**一个房间**时,下面会出现**房间目录**选项,可以从4个房间里面选择一个,随后这个窗口中只会显示这个房间的内容。在选择全部房间时,这个窗口将会像平常一样显示全部4个房间的内容。
|
||||
|
||||
> 注意,在选择**一个房间**时,这个房间中的所有房间事件都不会在这个窗口中生效,包括房间移动,淡入淡出房间,房间遮罩等。
|
||||
|
||||

|
||||
|
||||
**位置,缩放和角度:** 类似于摄像头移动的对应参数。
|
||||
|
||||
在内容模式为**一个房间**时,等同于调用房间的摄像头,`位置`是对应房间区域的对应坐标(左下角是`(0%, 0%)`,右上角是`(100%, 100%)`);
|
||||
|
||||
在选择**全部房间**时,等同于调用顶部摄像头,而所有房间可显示的范围为`(200%, 200%)`大小,所以当`位置`设置为`(100%, 100%)`时,实际会在(相对于一个房间默认大小的)`(200%, 200%)`的位置,默认位置的房间的`(100%, 100%)`则在`(75%, 75%)`的位置。
|
||||
|
||||
根据这个结论,可以将4个房间分别放在显示区域的四个角上,并显示`全部房间`,这样就能用`全部房间`分别显示4个房间了
|
||||
|
||||

|
||||
|
||||
无论选择哪种内容模式,超出区域范围的内容都会被裁剪。
|
||||
|
||||
**时长和缓速:** 略
|
||||
|
||||
## 重新排列窗口
|
||||
|
||||
类似于房间板块的**重新排列房间**,可以设置窗口的上下关系。
|
||||
|
||||
## 设置主窗口
|
||||
|
||||
将对应的窗口设置为主窗口,对话,顶部护士灯光,状态牌等内容将在主窗口显示。
|
||||
|
||||
## 设置窗口名称
|
||||
|
||||
修改窗口的标题。在动作选择**设置**的时候,会直接设置窗口的标题;在动作选择**增补**的时候,会在原来标题的后面增加内容;在动作选择**重置**的时候,会将标题重置为`Rhythm Doctor`。
|
||||
|
||||
## 设置桌面颜色
|
||||
|
||||
修改模拟移动时桌面的颜色,如果不打开起始颜色,则表示从当前颜色渐变为结束颜色,如果打开起始颜色,效果将类似于**自定义闪烁**。
|
||||
|
||||
## 进阶内容(可能需要手术)
|
||||
|
||||
> 如果你不知道手术是什么,可以[看看这里](https://docs.qq.com/sheet/DQUJxb0puSFFOVWpz?tab=000004)。
|
||||
|
||||
### 全屏窗口
|
||||
|
||||
因为窗口的最大大小写死了只能为200%,所以需要用到`OutElastic`缓速。
|
||||
|
||||
> 如果你忘了这个缓速长什么样,可以[看看这里](https://easings.net/zh-cn)。
|
||||
|
||||
注意到这个缓速的一部分会超出所设置的值,所以可以先将窗口缩小到`(1%,1%)`大小,然后使用`OutElastic`缓速将窗口缩放到`(200%,200%)`大小,当窗口变大的过程中会有几帧是占满整个屏幕的,此时放一个大小为`(200%,200%)`、时长为999、缓速为`Linear`的**窗口大小重置事件**,窗口大小就会固定成全屏的了。
|
||||
|
||||
> 使用注释指令`()=>windowSize(float SizeX%, float SizeY%, float duration)`可以直接将窗口缩放到200%以上,但这个方法只能控制窗口1的大小,还没有缓速。
|
||||
|
||||
### 更多窗口(暂时不确定官方会不会修这个)
|
||||
|
||||
在谱面中放置一个窗口相关的事件(这个例子用`隐藏窗口`事件),记住这个事件的小节、节拍和在第几行,然后打开这个谱面的文件(xxx.rdlevel),找到{ "bar": <小节>, "beat": <节拍>, "y": <行数减一>, "type": "HideWindow", "show": true },这一行,<>里面应该是你记住的数据,将"y": 后面的数替换成一个大于3的数,保存并返回编辑器,重新打开这个谱面,就会发现这个事件到第4行下面了,接着当正常窗口使用就行。
|
||||
|
||||
如果想要`重新排列窗口`,同上,找到"ReorderWindows", "order": [0, 1, 2, 3],在[]中加上 窗口的编号减一 的数,还有逗号。
|
||||
|
||||
窗口事件名称表:
|
||||
|
||||
| 事件 | 名称 |
|
||||
| :--- | :--- |
|
||||
| 窗口动效 | NewWindowDance |
|
||||
| 重置窗口大小 | WindowResize |
|
||||
| 设置窗口内容 | SetWindowContent |
|
||||
| 重新排列窗口 | ReorderWindows |
|
||||
| 隐藏窗口 | HideWindow |
|
||||
| 设置主窗口 | SetMainWindow |
|
||||
| 设置窗口名称 | RenameWindow |
|
||||
| 设置桌面颜色 | DesktopColor |
|
||||
|
||||
当然,如果你不想手术,可以安装[这个模组](https://github.com/9thCore/RDEditorPlus/releases)(b站有安装教程)
|
||||
@@ -44,3 +44,56 @@
|
||||
举个例子,假如你的设备输入延迟比较大,又或者你用的是蓝牙耳机,更甚至是Steam远程畅玩或是和好友远程玩双人关卡,此时你会发现,你按下空格键,会等大概一秒钟才会听到空拍音效,节奏点也会因为网络延迟延后判断,通常这时候我们会通过调整输入偏移来解决,但即使是调整了输入偏移,你在按空拍的时候还是会因为网络延迟等原因延后一秒钟才会播放空拍音效。
|
||||
|
||||
这也就是为什么说空拍音效的响起会对后续节奏判断产生影响了,偏移量小的玩家还没什么,无非就是多响一声而已,但偏移量大的玩家呢?所以制作过程中尽量不要让玩家在没有节拍的位置误认为有节拍并按了一个空拍,毕竟如果延迟比较大的话,这种误导性影响还是挺大的。
|
||||
|
||||
### *7、 使用屏幕朗读事件
|
||||
|
||||
官方在v0.19.0无障碍更新中加入了屏幕朗读事件,以为视障玩家群体提供更多支持。
|
||||
|
||||
> 为你的关卡添加屏幕朗读事件是可选的,但是请确保你正确使用了事件。同时,你**不应该**:
|
||||
>
|
||||
> - 添加会干扰正常游玩的屏幕朗读事件(如场景描述与画面不符、对轨道的错误提示等);
|
||||
> - 将屏幕朗读事件作为谱面玩法的一部分(除非在关卡描述中特别说明)。
|
||||
|
||||
在继续之前,请确保在`设置>易用性设置>朗读设置`中启用了`朗读`。
|
||||
|
||||
阅读[关卡屏幕阅读器的适配测试指南](https://docs.qq.com/doc/DUVJVc1pjam1uT1R6)以了解如何配置屏幕朗读。
|
||||
|
||||
另外,推荐在启用朗读的情况下先游玩官谱以作参考。
|
||||
|
||||
#### 朗读轨道信息
|
||||
|
||||

|
||||
|
||||
**轨道**:选择要朗读哪条轨道的信息。
|
||||
|
||||
**类型**:“**患者上线**”表示新的轨道被引入;“**患者更新**”表示某条轨道的行为模式改变;“**患者离线**”表示某条轨道在当前谱面不再被使用。
|
||||
“**医生上线**”“**医生离线**”与“**患者上线**”“**患者离线**”类似,只不过由电脑操控。
|
||||
|
||||
**仅声音提示**:启用该选项时,游戏将不会朗读该提示的类型。
|
||||
|
||||
**朗读X字拍子**:选择**开启**时,游戏将会朗读该轨道当前的X字拍子。选择**自定义**时,将会朗读玩家自定义的X字拍子,而不是轨道当前的X字拍子。例如,对于`----xx ---♥`,游戏会朗读“X拍56”;而当轨道没有X字拍子时,游戏会朗读“无X拍”。
|
||||
|
||||
**紊乱**:用于提示X字拍子连续变化的节拍(例如`X-WOT`)。
|
||||
|
||||
**玩家**:选择在双人模式下,该轨道由哪位玩家接管。
|
||||
|
||||
**自定义长度**:启用后将朗读所填的轨道长度。
|
||||
|
||||
一般情况下,游戏会按以下的顺序来朗读:
|
||||
|
||||
`[玩家][类型][轨道角色][X字拍子]`
|
||||
|
||||
#### 朗读口述
|
||||
|
||||
**口述内容**:游戏朗读的内容。
|
||||
|
||||
**朗读分类**:该朗读事件的类别。下面是官方对朗读分类的说明:
|
||||
|
||||
- 提示:适用于常规屏幕文字提示,“状态标识”信息默认归入此类。
|
||||
|
||||
- 描述:“朗读口述”事件的默认分类,专用于呈现纯视觉信息(如角色动画、背景环境等)。玩家可按`F6`键切换此类播报。
|
||||
|
||||
- 字幕:"浮动文字"事件的默认分类,适用于语音内容字幕(如歌词字幕),支持多语言翻译。玩家可按`F7`键切换此类播报。
|
||||
|
||||
- 说明:专用于游戏控制说明。播报后,玩家可随时按`F1`键重复听取当前指引(直至下一条指引信息覆盖)。
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
| sndPoliticianHurryUp3 | 政客说:Make a move already, would you? |
|
||||
| sndPoliticianHurryUp4 | 政客说:Oh, bloody hell. Hurry up already! |
|
||||
|
||||
### 在EA版本中出现的音效
|
||||
### 在正式版本中使用的音效
|
||||
|
||||
| 音效名 | 内容 |
|
||||
| :--- | :--- |
|
||||
@@ -160,10 +160,20 @@
|
||||
| sndWhistle5 | 口哨声第5拍 |
|
||||
| sndWhistle7 | 口哨声第7拍 |
|
||||
| sndApplause | 鼓掌声 |
|
||||
| sndRowShrink | 轨道缩短声 |
|
||||
| sndSkate1 | <code>MD-3</code>内布若拍子用到的提示音(准备) |
|
||||
| sndSkate2 | <code>MD-3</code>内布若拍子用到的提示音(释放) |
|
||||
| sndSquareshot | 哐啷声 |
|
||||
| sndTriangleshot1 | 三角拍子声(后面的数字可改为1~10) |
|
||||
| sndSleighHi | 圣诞树节拍器 - 高 |
|
||||
| sndSleighLo | 圣诞树节拍器 - 低 |
|
||||
| sndCalibrationBeep | 校准界面哔声 |
|
||||
| sndMelonMorse | Melon 摩尔斯电码 |
|
||||
| sndVividStasisResultsRiser | <code>X-FTS</code>恋恋群星S+评价前摇 |
|
||||
| sndVividStasisScratch | <code>X-FTS</code>恋恋群星V评价出现 |
|
||||
| sndWingFlap | 鸟儿扇动翅膀 |
|
||||
|
||||
### 未使用的音效
|
||||
### 未在正式版本中使用的音效
|
||||
|
||||
| 音效名 | 内容 |
|
||||
| :--- | :--- |
|
||||
@@ -245,7 +255,7 @@
|
||||
| sndLowHealthCSharpA | 低血量警告音 CA# |
|
||||
| sndLowHealthE | 低血量警告音 E |
|
||||
|
||||
### 在EA版本中出现的音乐
|
||||
### 在正式版本中出现的音乐
|
||||
|
||||
| 音效名 | 内容 | 曲速 |
|
||||
| :--- | :--- | :--- |
|
||||
@@ -262,27 +272,114 @@
|
||||
| sndTutorialDubstep | <code>MD-1</code>的教程音乐 | 114 |
|
||||
| sndTutorialDubstep_Bassless | <code>MD-1</code>的教程音乐,无贝斯 | 114 |
|
||||
| sndTutorialDubstep_Dotted | <code>MD-1</code>的教程音乐,有附点 | 114 |
|
||||
| sndTutorialHouse_Base | <code>5-2</code>和<code>5-2N</code>的教程音乐 | 120 |
|
||||
| sndTutorialHouse_AmenFill | <code>5-2</code>和<code>5-2N</code>的教程音乐开始练习前摇(镲声) | 120 |
|
||||
| sndTutorialHouse_FreezeCPU | <code>5-2</code>的教程音乐(伊恩演示) | 120 |
|
||||
| sndTutorialHouse_Freeze1 | <code>5-2</code>教程音乐的第一阶段 | 120 |
|
||||
| sndTutorialHouse_Freeze2 | <code>5-2</code>教程音乐的第二阶段 | 120 |
|
||||
| sndTutorialHouse_BurnCPU | <code>5-2N</code>的教程音乐(伊恩演示) | 120 |
|
||||
| sndTutorialHouse_Burn1 | <code>5-2N</code>教程音乐的第一阶段 | 120 |
|
||||
| sndTutorialHouse_Burn2 | <code>5-2N</code>教程音乐的第二阶段 | 120 |
|
||||
| sndTutorialHouse_Rest | <code>5-2</code>和<code>5-2N</code>的教程音乐(休息) | 120 |
|
||||
| sndTutorialHouse_Riser | <code>5-2</code>和<code>5-2N</code>的教程音乐开始练习前摇(鼓声) | 120 |
|
||||
| sndTutorialMilonga | <code>5-3N</code>的教程音乐 | 88 |
|
||||
| sndTutorialMilongaPrelude | <code>5-3N</code>的教程音乐前奏 | 88 |
|
||||
| sndTutorialSyncopation | <code>6-1</code>的教程音乐开头 | 110 |
|
||||
| sndTutorialSyncopation | <code>6-1</code>的教程音乐开头,无开头空白 | 110 |
|
||||
| sndTutorialSyncopation_Phase1 | <code>6-1</code>教程音乐第一阶段 | 110 |
|
||||
| sndTutorialSyncopation_Phase2 | <code>6-1</code>教程音乐第二阶段 | 110 |
|
||||
| sndTutorialHoldshot | <code>7-1</code>的教程音乐 | 95 |
|
||||
| sndTutorialHoldshot_Phase1 | <code>7-1</code>的教程音乐第一阶段 | 95 |
|
||||
| sndTutorialHoldshot_Phase2 | <code>7-1</code>的教程音乐第二阶段 | 95 |
|
||||
| sndTutorialHoldshot_Phase3 | <code>7-1</code>的教程音乐第三阶段 | 95 |
|
||||
| sndOrientalTechno | <code>1-1</code>东方电舞曲 | 100 |
|
||||
| sndOrientalTechnodown | <code>1-1N</code>东方回响贝斯的开头部分 | |
|
||||
| sndOrientalDubstep | <code>1-1N</code>东方回响贝斯 | 130 |
|
||||
| sndIntimate | <code>1-2</code>亲密 | 90 |
|
||||
| sndIntimate2P | 在双人模式下的<code>1-2N</code>亲密 | 90 |
|
||||
| sndOrientalInsomniac | <code>1-X</code>东方不眠夜 | 180 |
|
||||
| sndOrientalInsomniac1 | <code>1-X</code> 东方不眠夜 第一部分 | |
|
||||
| sndOrientalInsomniac2 | <code>1-X</code> 东方不眠夜 第二部分 | |
|
||||
| sndOrientalInsomniac3 | <code>1-X</code> 东方不眠夜 第三部分 | |
|
||||
| sndOrientalInsomniacHardRep | <code>1-XN</code>超东方不眠夜 | 160~180 |
|
||||
| sndGongXi | <code>1-CNY</code>春节贺岁片 | 145 |
|
||||
| sndHalloween | <code>1-BOO</code>恐怖鸟主题 | 100 |
|
||||
| sndLofi | <code>2-1</code>Lo-fi Hip-Hop Beats To Treat Patients To | 75 |
|
||||
| sndCareless | <code>2-1N</code>wish i could care less | 75->81 |
|
||||
| sndCarelessCN | <code>2-1N</code>wish i could care less中文版 | 75->81 |
|
||||
| sndSupraventricular88 | <code>2-2</code>室上性心动过速 | 88 |
|
||||
| sndUnreachable | <code>2-2N</code>Unreachable | 180 |
|
||||
| sndPuffPiece | <code>2-3</code>缭绕 | 127 |
|
||||
| Pomeranian | <code>2-3N</code>嗅炸弹的博美犬 | 127.2 |
|
||||
| song_of_the_sea | <code>2-4</code>与<code>2-4N</code>的背景音乐 | 60 |
|
||||
| sndAllTheTimes | <code>2-X</code>All The Times 咖啡之歌 | 145 |
|
||||
| sndAllTheTimesCN | <code>2-X</code>All The Times 咖啡之歌中文版 | 145 |
|
||||
| sndBitterness | <code>2-XN</code>Bitter Times 爱情是苦和甜的交错前半段 | 112->196-->231->255-->196 |
|
||||
| sndBitternessCutscene | <code>2-XN</code>Bitter Times 爱情是苦和甜的交错后半段 | |
|
||||
| sndTutorialBeans | <code>2-B1</code>武士豆子跳 | 110 |
|
||||
| sndSleepyGarden | <code>3-1</code>沉睡花园 | 158 |
|
||||
| sndLounge | <code>3-1N</code>休息室 | 75 |
|
||||
| sndBarbra | <code>3-2</code>典雅 | 115 |
|
||||
| sndDistantDuet | <code>3-3</code>分离二重唱 | 194 |
|
||||
| sndDistantDuetNight | <code>3-3</code>分离二重唱·夜 | 194 |
|
||||
| sndLesMisBar1 | <code>3-X</code>轮班之歌 | 100 |
|
||||
| sndLesMisBar39 | <code>3-X</code>轮班之歌 从第39小节开始 | |
|
||||
| sndLesmisDog | 节奏狗生 | 100 |
|
||||
| sndMinersong | <code>4-1</code>实习医生培训演练表现评估 | 128 |
|
||||
| sndRollerdisco | <code>4-1N</code>滑板迪斯科震颤 | 125.5 |
|
||||
| sndInvisible | <code>4-2</code>和<code>4-2N</code> | 190 |
|
||||
| sndSteinway | <code>4-3</code>斯坦威 | 80 |
|
||||
| sndKnowYou | <code>4-4</code>懂你 | 157 |
|
||||
| sndMurmurs | <code>4-4N</code>喃喃细语 | 65 |
|
||||
| sndLuckyBreak | <code>5-1</code>路吉摔了一跤 | 156 |
|
||||
| sndOSTL | <code>5-1N</code>One Slip Too Late 创伤之歌 | 175->150->175 |
|
||||
| sndOSTLCN | <code>5-1N</code>One Slip Too Late 创伤之歌中文版 | 175->150->175 |
|
||||
| sndFreezeshot | <code>5-2</code>Lo-fi Beats For Patients To Chill To | 140 |
|
||||
| sndFreezeshotH | <code>5-2N</code>无以为继的伤心欲绝 | 176->100->80 |
|
||||
| sndTherapy1 | <code>5-3</code>七局伸展操第一部分 | 128 |
|
||||
| sndTherapy2 | <code>5-3</code>七局伸展操第二部分 | 124 |
|
||||
| sndTherapy3 | <code>5-3</code>七局伸展操第三部分 | 136 |
|
||||
| sndTherapyEnding | <code>5-3</code>七局伸展操结尾 | 136 |
|
||||
| sndCorazonesViejos | <code>5-3N</code>偕老 | 248 |
|
||||
| sndDDS | <code>5-X</code>梦想永不歇 | 95->62.6->102.5 |
|
||||
| sndDDSCN | <code>5-X</code>梦想永不歇中文版 | 95->62.6->102.5 |
|
||||
| sndHaileyDuet | <code>6-1</code>想把心事和你说 | 94.5-->190-->200->210-->181->198? |
|
||||
| sndHaileyDuetCN | <code>6-1</code>想把心事和你说中文版 | 94.5-->190-->200->210-->181->198? |
|
||||
| sndEdegaRave | <code>6-2</code>欢迎回来 | 200->85->200 |
|
||||
| sndBossStage_Main | <code>6-X</code>Boss战(包括埃德加批评佩奇的一段) | 150~255 |
|
||||
| sndBossStage_NoCutscene | <code>6-X</code>Boss战(不包括埃德加批评佩奇的一段) | 150~255 |
|
||||
| sndBossStage_EndingShort | <code>6-X</code>Boss战结尾(包括埃德加批评佩奇的一段) | 165 |
|
||||
| sndBossStage_EndingLong | <code>6-X</code>Boss战结尾(不包括埃德加批评佩奇的一段) | 165 |
|
||||
| sndBlurred | <code>7-1</code>模糊 | 70 |
|
||||
| sndMontage | <code>7-X</code>奇迹除颤器 | 160 |
|
||||
| sndMontageIntro | <code>7-X</code>奇迹除颤器前奏 | |
|
||||
| sndColeSongLeaves | <code>7-X2</code>奇迹除颤器安可版(佩奇离职分支) | 91->121.2->182-->156->240?->228?-->360 |
|
||||
| sndColeSongStays | <code>7-X2</code>奇迹除颤器安可版(佩奇在职分支) | 91->121.2->182-->156->240?->228?-->360 |
|
||||
| sndArtExercise | <code>X-1</code>美术练习 | 140 |
|
||||
| sndHelpingHands | <code>X-0</code>伸出援手 | 178 |
|
||||
| sndHelpingHandsCN | <code>X-0</code>伸出援手中文版 | 178 |
|
||||
| sndBlackestLuxuryCar | <code>MD-1</code>BlackestLuxuryCar | 178 |
|
||||
| sndTapeStopNight | <code>MD-2</code>Tape/Stop/Night | 115 |
|
||||
| sndThe90sDecision | <code>MD-3</code>The90sDecision | 128 |
|
||||
| sndMeetAndTweet | <code>X-MAT</code>Meet And Tweet | 110 |
|
||||
| sndWornOutTapes | <code>X-WOT</code>Worn Out Tapes | 149 |
|
||||
| sndSparkLine | <code>X-KOB</code>气球王国 | 124 |
|
||||
| sndVividStasis | <code>X-FTS</code>恋恋群星 | 150 |
|
||||
| sndVividStasisResults | <code>X-FTS</code>恋恋群星V评价结算音乐 | 150 |
|
||||
| sndOsmBluesRadio | 夜间的病房内过剧情 | 98? |
|
||||
| sndOsmBluesNormal | 袖管涂鸦背景音乐 | 98? |
|
||||
| sndInsomniacCutscene | 1-X后过剧情 | 140 |
|
||||
| SoftPianoIntimate | 第一章末尾的过剧情 | 88 |
|
||||
| sndDistantDuetCutsceneLoop | 3-3后过剧情 | 165 |
|
||||
| sndDDSPianoCutsceneLoop | 5-X后过剧情第一部分 | 130 |
|
||||
| sndDDSEdegaCutscene | 5-X后过剧情第一部分(埃德加来) | 140 |
|
||||
| sndDDSVirusTalkCutsceneLoop | 5-X后过剧情(伊恩来) | 105 |
|
||||
| sndMarksTheme | 病历间音乐 | 110 |
|
||||
| sndBlurredCutscene | 7-1后过剧情 | 63? |
|
||||
| sndPaigeReturnsCutscene | 佩奇回来 | 157? |
|
||||
| sndEdegaBedsidePaigeCutscene | 7-X2后埃德加住院 | 58? |
|
||||
|
||||
### 未使用的音乐
|
||||
### 未在正式版本中出现的音乐
|
||||
|
||||
| 音效名 | 内容 | 曲速 |
|
||||
| :--- | :--- | :--- |
|
||||
@@ -294,4 +391,5 @@
|
||||
| sndChopin | Op.10 No.4 | |
|
||||
| sndOrientalInsomniacHardRepOld | 超东方不眠夜(旧版) | |
|
||||
| sndGreenlightInsomniac | 超东方不眠夜(预告片版) | |
|
||||
| sndOpeningCredits | |
|
||||
| sndLanterns | | 150 |
|
||||
| sndOpeningCredits | | 187.9 |
|
||||
|
||||
@@ -4,90 +4,116 @@
|
||||
|
||||
| 功能 | 快捷键 | 章节 | 内容 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 播放音乐 | `P` | [导入与导出](../pages/importandexport.md#导入音乐) | 设置谱面的音乐 |
|
||||
| 播放音乐 | `P` | [导入与导出](../pages/importandexport.md#导入音乐) | 设置谱面的音乐 |
|
||||
| 设置音节长度 | `C` | | 设置每个小节的拍子数量 |
|
||||
| 播放音效 | `S` | [音效设计](../pages/audiodesign.md#播放音效) | 播放游戏内置的音效或是导入的音效 |
|
||||
| 设置BPM | `B` | [导入与导出](../pages/importandexport.md#调整曲速和偏移) | 设置音乐的BPM |
|
||||
| 设置按拍音效 | `L` | [音效设计](../pages/audiodesign.md#设置按拍音效) | 设置玩家正确击中拍子时的音效 |
|
||||
| 设置心跳音量 | `H` | [音效设计](../pages/audiodesign.md#心爆) | 设置正确击中拍子时心跳的音效音量 |
|
||||
| 设置心跳音量 | `H` | [音效设计](../pages/audiodesign.md#心爆) | 设置正确击中拍子时心跳的音效音量 |
|
||||
| 设置心爆间隔 | `I` | [音效设计](../pages/audiodesign.md#心爆) | 设置心爆效果的延迟方式与间隔 |
|
||||
| 护士语音设置 | `R` | [音效设计](../pages/oneshotbeat.md#护士节奏提示) | 添加用于提示单发拍子的护士语音 |
|
||||
| 设置游戏音效 | `G` | [音效设计](../pages/audiodesign.md#设置游戏音效) | 设置玩家按键时的各种音效声 |
|
||||
| 设置节拍音效 | `T` | [音效设计](../pages/audiodesign.md#设置节拍音效) | 重新设置替换指定轨道的节拍音效 |
|
||||
| 设置数拍音效 | `U` | [普通拍子](../pages/classicbeat.md#护士节奏提示) | 设置普通拍子的数拍音效 |
|
||||
| 设置数拍音效 | `U` | [普通拍子](../pages/classicbeat.md#护士节奏提示) | 设置普通拍子的数拍音效 |
|
||||
| 朗读口述 | `N` | [无障碍设计](../pages/accessibledesign.md#朗读口述) | 添加用于文字说明的屏幕朗读事件 |
|
||||
| 朗读轨道信息 | `F` | [无障碍设计](../pages/accessibledesign.md#朗读轨道信息) | 添加用于轨道提示的屏幕朗读事件 |
|
||||
| 注释 | `M` | [标签](../pages/tag.md#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 |
|
||||
|
||||
## 蓝色版块(轨道)
|
||||
|
||||
| 功能 | 快捷键 | 章节 | 内容 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 设置波 | | [单发拍子](../pages/oneshotbeat.md#单发拍子视觉效果) | 设置单发拍子脉冲的形状和大小 |
|
||||
| 设置单发波形 | | [单发拍子](../pages/oneshotbeat.md#单发拍子视觉效果) | 设置单发拍子脉冲的形状和大小 |
|
||||
|
||||
## 紫色版块(动作)
|
||||
|
||||
| 功能 | 快捷键 | 章节 | 内容 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **玩法类** | | | |
|
||||
| 隐藏轨道 | `X` | [轨道移动](../pages/moverow.md#轨道的显示与隐藏) | 改变轨道的显示和隐藏状态 |
|
||||
| 切换玩家轨道 | `Y` | [采音和节奏设计](../pages/beatpatterndesign.md) | 切换轨道的游玩者:1P,2P或是CPU |
|
||||
| 结束关卡 | `L` | [导入与导出](../pages/importandexport.md#导出关卡) | 制作关卡必需的特效,放置三个来结束关卡 |
|
||||
| 设置播放模式 | `9` | | 设置播放头的运动方式 |
|
||||
| 显示手 | `U` | [手](../pages/hand.md#显示手) | 显示或者隐藏手 |
|
||||
| 手涂色 | `Shift+U` | [手](../pages/hand.md#手涂色) | 设置轨道的边框、涂色、透明度 |
|
||||
| 手分配 | `Shift+Y` | [手](../pages/hand.md#手分配) | 为手设置所属角色 |
|
||||
| 设置播放方式 | `Shift+Z` | | 设置播放头的运动方式 |
|
||||
| **环境类** | | | |
|
||||
| 设置主题 | `T` | [场景与主题](../pages/settheme.md) | 给房间添加游戏内置的主题效果 |
|
||||
| 设置背景 | `B` | [房间](../pages/room.md#背景图片) | 给房间添加纯色背景或是导入自制背景图片 |
|
||||
| 设置前景 | `G` | [房间](../pages/room.md#前景图片) | 给房间导入自制的前景图片 |
|
||||
| **轨道类** | | | |
|
||||
| 设置前景 | `Shift+B` | [房间](../pages/room.md#前景图片) | 给房间导入自制的前景图片 |
|
||||
| 设置速度 | `S` | [轨道视效](../pages/vfx.md#设置速度) | 改变整个画面中物件及特效的运行速度 |
|
||||
| 自定义闪烁 | `F` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 自定义屏幕闪烁的图层位置,颜色,透明度 |
|
||||
| 闪烁 | `Shift+F` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 简单地屏幕闪烁 |
|
||||
| **轨道特效类** | | | |
|
||||
| 隐藏轨道 | `X` | [轨道移动](../pages/moverow.md#轨道的显示与隐藏) | 改变轨道的显示和隐藏状态 |
|
||||
| 移动轨道 | `O` | [轨道移动](../pages/moverow.md#轨道的移动) | 让轨道在画面中移动,缩放,旋转等 |
|
||||
| 轨道重排序~~重排序:行~~ | `Shift+O` | | 将轨道移动到不同房间,或是重新对轨道进行排序 |
|
||||
| 播放表情 | `J` | [自制角色与精灵资源](../pages/spritesheet.md#播放表情) | 改变轨道中角色的表情 |
|
||||
| 改变角色 | `Shift+J` | [轨道视效](../pages/rowfx.md#轨道涂色) | 改变轨道的角色 |
|
||||
| 轨道涂色 | `R` | [轨道视效](../pages/rowfx.md#轨道涂色) | 设置轨道的边框、涂色、透明度 |
|
||||
| 切换轨道 | `Y` | [采音和节奏设计](../pages/beatpatterndesign.md) | 切换轨道的游玩者:1P,2P或是CPU |
|
||||
| **镜头类** | | | |
|
||||
| 旋转轨道 | `Shift+S` | | (仅高级模式下可用)将另一个轨道连接到角色上,实现`7-1`中的一人多轨 |
|
||||
| **摄像头特效类** | | | |
|
||||
| 移动摄像头 | `C` | [镜头移动](../pages/camera.md) | 设置摄像头动画 |
|
||||
| 屏幕震动 | `H` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 添加屏幕震动效果,可指定震动幅度 |
|
||||
| 翻转屏幕 | `N` | [视觉干扰](../pages/vfx.md) | 上下,左右,或是中心反转屏幕 |
|
||||
| 脉冲摄像机 | `P` | [轨道视效](../pages/rowfx.md#和轨道相关的特效) | 添加一个按一定时间和频次缩放画面的效果 |
|
||||
| **视效类** | | | |
|
||||
| 脉冲摄像机 | `Shift+C` | [轨道视效](../pages/rowfx.md#和轨道相关的特效) | 添加一个按一定时间和频次缩放画面的效果 |
|
||||
| 自定义震动 | `H` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 自定义屏幕震动的震动类型,时长,增幅 |
|
||||
| 屏幕震动 | `Shift+H` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 简单地屏幕震动,可指定震动幅度 |
|
||||
| 屏幕翻转 | `Shift+I` | [视觉干扰](../pages/vfx.md) | 上下,左右,或是中心反转屏幕 |
|
||||
| **视觉特效类** | | | |
|
||||
| 预设特效 | `V` | [ex2](../pages/appendix_vfxs.md) | 插入编辑器预置的特效 |
|
||||
| 设置速度 | `S` | [轨道视效](../pages/vfx.md#设置速度) | 改变整个画面中物件及特效的运行速度 |
|
||||
| 闪烁 | `F` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 简单地屏幕闪烁 |
|
||||
| 自定义闪烁 | `U` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 自定义屏幕闪烁的图层位置,颜色,透明度 |
|
||||
| 重低音震动 | `K` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 添加一次大幅度的色像差加大幅度屏幕缩放 |
|
||||
| 反转颜色 | `I` | [镜厅](../pages/hallofmirror.md) | 给画面添加反色效果 |
|
||||
| 卡带效果 | `0` | [视觉干扰](../pages/vfx.md#卡带效果) | 反复重现某个画面造成卡顿错觉 |
|
||||
| 窗口动效 | `W` | [窗口移动](../pages/windowmove.md) | 把关卡变成窗口模式,并设置窗口的移动 |
|
||||
| 自定义闪烁 | `F` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 自定义屏幕闪烁的图层位置,颜色,透明度 |
|
||||
| 闪烁 | `Shift+F` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 简单地屏幕闪烁 |
|
||||
| 重低音震动 | `K` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 添加一次大幅度的色像差+大幅度屏幕缩放 |
|
||||
| 颜色反转 | `I` | [镜厅](../pages/hallofmirror.md) | 给画面添加反色效果 |
|
||||
| 卡带效果 | `E` | [视觉干扰](../pages/vfx.md#卡带效果) | 反复重现某个画面造成卡顿错觉 |
|
||||
| 手涂色 | `Shift+U` | [手](../pages/hand.md#手涂色) | 改变手的颜色 |
|
||||
| 窗口动效 | `W` | [窗口移动](../pages/WindowDance.md#窗口相关的动画) | 把关卡变成窗口模式,并设置窗口的移动 |
|
||||
| **文本类** | | | |
|
||||
| 弹幕效果 | `E` | [其他文字事件](../pages/captions.md#弹幕效果) | 添加一个从右至左的弹幕飘过效果 |
|
||||
| 显示对话 | `D` | [其他文字事件](../pages/captions.md#显示对话) | 添加一个悬浮在屏幕上方或下方的对话窗口 |
|
||||
| 显示状态牌 | `Q` | [其他文字事件](../pages/captions.md#显示状态牌) | 在画面左上角显示一个状态牌 |
|
||||
| 显示状态标识 | `Shift+D` | [其他文字事件](../pages/captions.md#显示状态牌) | 在画面左上角显示一个状态标识 |
|
||||
| 浮动文字 | `A` | [浮动文字](../pages/floatingtext.md) | 在画面中显示一段文字 |
|
||||
| **手 类** | | | |
|
||||
| 显示手 | `5` | [手](../pages/hand.md#显示手) | 显示或者隐藏手 |
|
||||
| 手涂色 | `6` | [手](../pages/hand.md#手涂色) | 改变手的颜色 |
|
||||
| 手分配 | `7` | [手](../pages/hand.md#手分配) | 为手设置所属角色 |
|
||||
| 弹幕效果 | `Shift+A` | [其他文字事件](../pages/captions.md#弹幕效果) | 添加弹幕飘过效果 |
|
||||
| **组件类** | | | |
|
||||
| 标签动作 | `8` | [标签](../pages/tag.md#设置标签事件) | 运行/禁用指定标签带有的事件 |
|
||||
| 自定义方法 | `Z` | [自定义方法](../pages/custommethod.md) | 运行指令,执行无法用常规手段达成的效果 |
|
||||
| 注释 | `M` | [标签](../pages/tag.md#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 |
|
||||
|
||||
## 绿色版块(精灵)
|
||||
|
||||
| 功能 | 快捷键 | 章节 | 内容 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 移动精灵图 | `O` | [自制角色与精灵资源](../pages/decoration.md#移动精灵图) | 设置精灵的位置、大小、角度、轴点 |
|
||||
| 绘制精灵图 | `T` | [使用精灵](../pages/decoration.md#绘制精灵图) | 设置精灵的边框、涂色、透明度 |
|
||||
| 播放表情 | `P` | [使用精灵](../pages/decoration.md#播放表情) | 播放精灵的表情 |
|
||||
| 显示/隐藏 | `V` | [使用精灵](../pages/decoration.md#显示/隐藏) | 显示或隐藏精灵 |
|
||||
| 平铺精灵图 | `V` | [使用精灵](../pages/decoration.md#平铺精灵图) | 显示或隐藏精灵 |
|
||||
| 标签动作 | `O` | [标签](../pages/tag.md#设置标签事件) | 运行/禁用带有指定标签的事件 |
|
||||
| 调用自定义方法 | `Z` | [自定义方法](../pages/custommethod.md) | 运行指令,执行无法用常规手段达成的效果 |
|
||||
| 注释 | `M` | [标签](../pages/tag.md#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 |
|
||||
|
||||
## 黄色版块(房间)
|
||||
|
||||
| 功能 | 快捷键 | 章节 | 内容 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 排列显示房间 | `S` | [房间](../pages/room.md#排列显示房间) | 改变四个房间的前后顺序 |
|
||||
| 排列显示房间 | `S` | [房间](../pages/room.md#排列显示房间) | 从上到下显示房间 |
|
||||
| 移动房间 | `M` | [镜头移动](../pages/camera.md) | 让房间在画面中移动,缩放,旋转等 |
|
||||
| 重新排序房间 | `O` | [房间](../pages/room.md#房间的前后关系) | 改变四个房间的前后顺序 |
|
||||
| 重新排序房间 | `O` | [房间](../pages/room.md#房间的前后关系) | 改变四个房间叠放时的上下关系 |
|
||||
| 设置房间内容模式 | `C` | [镜头移动](../pages/camera.md) | 设置房间在缩小时是缩放房间还是剪裁房间 |
|
||||
| 房间遮罩 | `K` | [房间视效](../pages/roomfx.md#房间遮罩) | 为房间设置遮罩 |
|
||||
| 淡入淡出房间 | `F` | [镜头移动](../pages/camera.md) | 设置房间的透明度 |
|
||||
| 设置房间视角 | `P` | [房间视效](../pages/roomfx.md#设置房间视角) | 设置房间的四个角的位置 |
|
||||
| 注释 | `M` | [标签](../pages/tag.md#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 |
|
||||
| 注释 | `T` | [标签](../pages/tag.md#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 |
|
||||
|
||||
## 绿色版块(精灵)
|
||||
|
||||
| 功能 | 快捷键 | 章节 | 内容 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 移动精灵图 | `O` | [自制角色与精灵资源](../pages/decoration.md#移动精灵图) | 设置精灵的位置、大小、角度、轴点 |
|
||||
| 绘制精灵图 | `R` | [使用精灵](../pages/decoration.md#绘制精灵图) | 设置精灵的边框、涂色、透明度 |
|
||||
| 播放表情 | `J` | [使用精灵](../pages/decoration.md#播放表情) | 播放精灵的表情 |
|
||||
| 显示/隐藏 | `X` | [使用精灵](../pages/decoration.md#显示/隐藏) | 显示或隐藏精灵 |
|
||||
| 精灵重排序~~重排序:行~~ | `Shift+O` | | 将精灵移动到不同房间,或是重新对精灵进行排序 |
|
||||
| 平铺精灵图 | `I` | [使用精灵](../pages/decoration.md#平铺精灵图) | 显示或隐藏精灵 |
|
||||
| 混合精灵图 | `B` | | 设置精灵的颜色混合模式 |
|
||||
| 注释 | `M` | [标签](../pages/tag.md#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 |
|
||||
|
||||
## 淡蓝色版块(窗口)
|
||||
|
||||
| 功能 | 快捷键 | 章节 | 内容 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 窗口动效 | `W` | [窗口相关的动画](../pages/WindowDance.md#窗口动效) | 设置窗口的移动模式,移动窗口 |
|
||||
| 窗口大小重置 | `R` | [窗口相关的动画](../pages/WindowDance.md#窗口大小重置) | 改变窗口的大小、缩放模式、轴点 |
|
||||
| 设置窗口内容 | `C` | [窗口相关的动画](../pages/WindowDance.md#设置窗口内容) | 设置窗口显示的内容是哪个房间或全部房间 |
|
||||
| 重新排列窗口 | `O` | [窗口相关的动画](../pages/WindowDance.md#重新排列窗口) | 改变四个窗口叠放时的上下关系 |
|
||||
| 隐藏窗口 | `H` | [窗口相关的动画](../pages/WindowDance.md#隐藏窗口) | 隐藏或显示窗口 |
|
||||
| 设置主窗口 | `U` | [窗口相关的动画](../pages/WindowDance.md#设置主窗口) | 设置对话,顶部护士灯光,状态牌等内容在哪个窗口显示 |
|
||||
| 设置窗口名称 | `N` | [窗口相关的动画](../pages/WindowDance.md#设置窗口名称) | 修改窗口的标题 |
|
||||
| 设置桌面颜色 | `D` | [窗口相关的动画](../pages/WindowDance.md#设置桌面颜色) | 修改模拟移动时桌面的颜色 |
|
||||
| 注释 | `M` | [标签](../pages/tag.md#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 |
|
||||
|
||||
@@ -98,6 +98,12 @@
|
||||
|
||||
在`5-2N 无以为继的伤心欲绝`中被首次引入。
|
||||
|
||||
### 长按单发拍子
|
||||
|
||||
当听到咻噗的声音时,说明下一次击拍需要长按到下一个出拍点。
|
||||
|
||||
在`7-1 模糊`中被首次引入。
|
||||
|
||||
### 冲击拍子
|
||||
|
||||
单发拍子根据哨声提示在脉冲和按拍时全都按拍。
|
||||
|
||||
@@ -20,4 +20,74 @@ g 1 1 5 4 #0ff{
|
||||
};
|
||||
</textarea></div></div>
|
||||
|
||||
---
|
||||
|
||||
完整功能支持请前往[此处](https://view.obugs.cn)。
|
||||
|
||||
<div class="rdview2"><div class="canvas"></div><div class="editor"><div class="number"></div><textarea class="area" spellcheck="false" placeholder="Enter code here">
|
||||
{ "bar": 1, "beat": 1, "y": 0, "type": "MoveRoom", "if": "1d0", "roomPosition": [50, 50], "scale": [70, 100], "angle": 20, "pivot": [0, 0], "duration": 1, "ease": "Linear" },
|
||||
{ "bar": 1, "beat": 1, "y": 6, "type": "AddOneshotBeat", "pulseType": "Triangle", "tick": 2, "subdivisions": 2, "subdivSound": true },
|
||||
{ "bar": 1, "beat": 2, "y": 0, "type": "AddClassicBeat", "tick": 0.5, "swing": 0, "hold": 0 },
|
||||
{ "bar": 1, "beat": 2, "y": 1, "type": "ReorderRooms", "order": [1, 3, 2, 0] },
|
||||
{ "bar": 1, "beat": 2, "y": 5, "type": "SetSpeed", "speed": 1, "duration": 0, "ease": "Linear" },
|
||||
{ "bar": 1, "beat": 3, "y": 3, "type": "AddOneshotBeat", "pulseType": "Wave", "tick": 2 },
|
||||
{ "bar": 1, "beat": 4, "y": 4, "type": "AddOneshotBeat", "pulseType": "Wave", "freezeBurnMode": "Burnshot", "interval": 2, "tick": 1 },
|
||||
{ "bar": 1, "beat": 5, "y": 1, "type": "SetBeatsPerMinute", "if": "~3d0", "beatsPerMinute": 100 },
|
||||
{ "bar": 1, "beat": 5, "y": 2, "type": "SetBackgroundColor", "rooms": [0], "backgroundType": "Color", "color": "FFFFFFFF", "filter": "NearestNeighbor" },
|
||||
{ "bar": 1, "beat": 5, "y": 5, "type": "SetGameSound", "soundType": "SmallMistake", "filename": "" },
|
||||
{ "bar": 1, "beat": 5, "y": 6, "type": "SetHeartExplodeInterval", "intervalType": "GatherAndCeil", "interval": 1 },
|
||||
{ "bar": 1, "beat": 7, "y": 0, "type": "AddClassicBeat", "tag": "1", "tick": 0.5, "hold": 1, "swing": 0.5, "setXs": "NoChange" },
|
||||
{ "bar": 1, "beat": 7, "y": 6, "type": "AddOneshotBeat", "pulseType": "Wave", "freezeBurnMode": "Freezeshot", "interval": 2, "tick": 1, "delay": 0.5, "skipshot": true },
|
||||
{ "bar": 1, "beat": 8, "y": 1, "type": "SetVisible", "visible": true },
|
||||
{ "bar": 1, "beat": 8, "y": 2, "type": "ShowStatusSign", "if": "1d0", "text": "RhythmBase.View!", "duration": 5, "useBeats": true, "narrate": true },
|
||||
{ "bar": 1, "beat": 8, "y": 3, "type": "Tint", "border": "Glow", "borderColor": "FF0000FF", "tint": true, "tintColor": "001BFFFF", "opacity": 100, "duration": 3, "ease": "Linear" },
|
||||
{ "bar": 1, "beat": 8, "y": 4, "type": "SetCountingSound", "voiceSource": "JyiCount", "enabled": true, "volume": 100, "subdivOffset": 0.5 },
|
||||
{ "bar": 1, "beat": 8, "y": 5, "type": "TextExplosion", "rooms": [0], "text": "Explosion", "color": "000000", "mode": "OneColor", "direction": "Left", "speed": 100, "ease": "Linear" },
|
||||
{ "bar": 2, "beat": 2, "y": 5, "type": "SayReadyGetSetGo", "tag": "1", "rooms": [4], "phraseToSay": "JustSayRea", "voiceSource": "Nurse", "tick": 1, "volume": 100 },
|
||||
{ "bar": 2, "beat": 3, "y": 1, "type": "Move", "position": [50, 50], "duration": 1, "ease": "Linear" },
|
||||
{ "bar": 2, "beat": 3, "y": 2, "type": "NewWindowDance", "tab": "Windows", "preset": "Move", "position": [50, 50], "reference": "Center", "easingDuration": 1, "ease": "Linear" },
|
||||
{ "bar": 2, "beat": 3, "y": 3, "type": "PlayAnimation", "expression": "neutral" },
|
||||
{ "bar": 2, "beat": 3, "y": 4, "type": "SetOneshotWave", "waveType": "BoomAndRush", "height": 100, "width": 100 },
|
||||
{ "bar": 2, "beat": 5, "y": 0, "type": "BassDrop", "if": "1&~2d0", "rooms": [0], "strength": "High" },
|
||||
{ "bar": 2, "beat": 5, "y": 1, "type": "ShowDialogue", "rooms": [4], "text": "Samurai_Happy: SAMURAI!", "speed": 1, "panelSide": "Bottom", "portraitSide": "Left", "playTextSounds": true },
|
||||
{ "bar": 2, "beat": 5, "y": 2, "type": "FloatingText", "rooms": [0], "id": 0, "text": "等/呀/等/得/好/心/慌……", "times": "", "color": "00F4FFFF", "outlineColor": "0011FFFF", "textPosition": [50, 50], "font": "Default", "size": 8, "angle": 0, "showChildren": true, "fadeOutRate": 3, "mode": "FadeOut", "anchor": "MiddleCenter", "narrate": true, "narrationCategory": "Subtitles" },
|
||||
{ "bar": 2, "beat": 6, "y": 3, "type": "SetRoomPerspective", "cornerPositions": [[0, 0], [100, 0], [0, 100], [100, 100]], "duration": 1, "ease": "Linear" },
|
||||
{ "bar": 2, "beat": 6, "y": 4, "type": "SetPlayStyle", "PlayStyle": "Normal", "NextBar": 1, "Relative": true },
|
||||
{ "bar": 2, "beat": 7, "y": 5, "type": "SetCrotchetsPerBar", "crotchetsPerBar": 7, "visualBeatMultiplier": 1 },
|
||||
{ "bar": 2, "beat": 7, "y": 6, "type": "SetHandOwner", "rooms": [0], "hand": "Right", "character": "Player" },
|
||||
{ "bar": 2, "beat": 8, "y": 3, "type": "SetBeatSound", "row": 0, "sound": {"filename": "Shaker"} },
|
||||
{ "bar": 2, "beat": 8, "y": 4, "type": "TintRows", "if" : "1&~2d1", "rooms": [0], "border": "Outline", "borderColor": "2BFF00FF", "tint": true, "tintColor": "007E0EFF", "opacity": 100, "duration": 0, "ease": "Linear", "effect": "None" },
|
||||
{ "bar": 3, "beat": 1, "y": 0, "type": "MoveCamera", "rooms": [0], "cameraPosition": [50, 50], "duration": 1, "ease": "Linear" },
|
||||
{ "bar": 3, "beat": 1, "y": 1, "type": "ShowHands", "rooms": [0], "hand": "Right", "action": "Show", "extent": "Full", "forceRaise": true, "align": false, "instant": false },
|
||||
{ "bar": 3, "beat": 1, "y": 2, "type": "PulseCamera", "rooms": [0], "strength": 1, "count": 1, "frequency": 1 },
|
||||
{ "bar": 3, "beat": 3, "y": 2, "type": "SayReadyGetSetGo", "if": "1d0", "rooms": [4], "phraseToSay": "SayGetSetOne", "voiceSource": "Nurse", "tick": 1, "volume": 100 },
|
||||
{ "bar": 3, "beat": 3, "y": 6, "type": "FlipScreen", "rooms": [0], "flipX": false, "flipY": true },
|
||||
{ "bar": 3, "beat": 4, "y": 6, "type": "InvertColors", "rooms": [0], "enable": true },
|
||||
{ "bar": 3, "beat": 5, "y": 3, "type": "DesktopColor", "endColor": "00ffff", "duration": 2, "ease": "Linear" },
|
||||
{ "bar": 3, "beat": 6, "y": 6, "type": "SayReadyGetSetGo", "rooms": [4], "phraseToSay": "JustSayAndStop", "voiceSource": "Nurse", "tick": 1, "volume": 100 },
|
||||
{ "bar": 3, "beat": 5, "y": -1, "type": "AdvanceText", "id": 0, "text": "text 字段不存在于原事件中,但是 RDView 提供了支持。" },
|
||||
{ "bar": 3, "beat": 5.5, "y": -1, "type": "PulseFreeTimeBeat", "row": 0, "action": "Increment", "hold": 0 },
|
||||
{ "bar": 3, "beat": 8, "y": 3, "type": "HideWindow", "show": false },
|
||||
{ "bar": 3, "beat": 8, "y": 4, "type": "NarrateRowInfo", "row": 0, "infoType": "Connect", "soundOnly": false, "narrateSkipBeats": "On", "skipsUnstable": false, "customPlayer": "AutoDetect" },
|
||||
{ "bar": 3, "beat": 8, "y": 5, "type": "Comment", "tab": "Actions", "text": "五彩斑斓的黑", "color": "8C00FF", "show": false },
|
||||
{ "bar": 4, "beat": 1, "y": 2, "type": "PaintHands", "rooms": [0], "hands": "Right", "border": "Outline", "borderColor": "AFFF00FF", "tint": true, "tintColor": "4FAF00FF", "opacity": 100, "duration": 0 },
|
||||
{ "bar": 4, "beat": 1, "y": 4, "type": "CallCustomMethod", "methodName": "", "executionTime": "OnBar", "sortOffset": 0 },
|
||||
{ "bar": 4, "beat": 1, "y": 6, "type": "SetWindowContent", "contentMode": "OnTop" },
|
||||
{ "bar": 4, "beat": 2, "y": 2, "type": "FadeRoom", "opacity": 100, "duration": 2, "ease": "Linear" },
|
||||
{ "bar": 4, "beat": 2, "y": 4, "type": "PlaySong", "song": {"filename": "sndOrientalTechno"}, "bpm": 100, "loop": false },
|
||||
{ "bar": 4, "beat": 2, "y": 6, "type": "SetRowXs", "pattern": "-x--x-", "syncoBeat": 3, "syncoSwing": 0, "syncoVolume": 70, "syncoPitch": 100, "syncoStyle": "Chirp", "syncoPlayModifierSound": true, "syncoPlayModifierOffSound": true },
|
||||
{ "bar": 4, "beat": 3, "y": 3, "type": "ChangeCharacter", "row": 0, "character": "Samurai", "transition": "Instant" },
|
||||
{ "bar": 4, "beat": 5, "y": 2, "type": "ShowRooms", "rooms": [1, 3], "heights": [0, 0, 0, 0], "transitionTime": 1, "ease": "InOutSine" },
|
||||
{ "bar": 4, "beat": 6, "y": 6, "type": "RenameWindow", "action": "Set", "text": "Minecraft 1.21.1 NeoForge" },
|
||||
{ "bar": 4, "beat": 7, "y": 2, "type": "SetVFXPreset", "rooms": [0], "preset": "Vignette", "enable": true },
|
||||
{ "bar": 4, "beat": 7, "y": 3, "type": "PlaySound", "sound": {"filename": "Shaker"}, "customSoundType": "CueSound" },
|
||||
{ "bar": 4, "beat": 7, "y": 4, "type": "SetTheme", "rooms": [0], "preset": "None", "skipPaintEffects": false },
|
||||
{ "bar": 4, "beat": 7, "y": 5, "type": "SetRoomContentMode", "mode": "Center" },
|
||||
{ "bar": 4, "beat": 8, "y": 6, "type": "TagAction", "Action": "Run", "Tag": "Nothing" },
|
||||
{ "bar": 5, "beat": 1, "y": 2, "type": "PulseCamera", "rooms": [0], "strength": 1, "count": 1, "frequency": 1 },
|
||||
{ "bar": 5, "beat": 1, "y": 3, "type": "SetClapSounds", "rowType": "Classic", "p1Sound": {"filename": "ClapHit"} },
|
||||
{ "bar": 5, "beat": 1, "y": 4, "type": "ChangePlayersRows", "playerMode": "OneOrTwoPlayers", "players": ["NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange", "NoChange"], "cpuMarkers": ["Otto", "Otto", "Otto", "Otto", "Otto", "Otto", "Otto", "Otto", "Otto", "Otto", "Otto", "Otto", "Otto", "Otto", "Otto", "Otto"] },
|
||||
{ "bar": 5, "beat": 1, "y": 5, "type": "ReadNarration", "text": "一名身穿红色盔甲的武士跟着音乐节拍点头。", "category": "Description" }
|
||||
</textarea></div></div>
|
||||
|
||||
---
|
||||
@@ -5,32 +5,39 @@
|
||||
| 特效名称 | 具体效果 |
|
||||
| :--- | :--- |
|
||||
| **摄像头类** | |
|
||||
| <font color='red'>屏幕块2x2</font> | 把屏幕块变成2x2个相同的部分 |
|
||||
| <font color='red'>屏幕块3x3</font> | 把屏幕块变成3x3个相同的部分 |
|
||||
| <font color='red'>屏幕块4x4</font> | 把屏幕块变成4x4个相同的部分 |
|
||||
| 自定义屏幕块 | 把屏幕块变成任意个相同的部分,注意这里是可以填写小数的 |
|
||||
| <font color='red'>屏幕分隔2x2</font> | 把屏幕分隔变成2x2个相同的部分 |
|
||||
| <font color='red'>屏幕分隔3x3</font> | 把屏幕分隔变成3x3个相同的部分 |
|
||||
| <font color='red'>屏幕分隔4x4</font> | 把屏幕分隔变成4x4个相同的部分 |
|
||||
| 屏幕分割 | 把屏幕分隔变成任意个相同的部分,注意这里是可以填写小数的 |
|
||||
| <font color='red'>水平滚屏</font> | 画面向左移动,并且从右方重复出现 |
|
||||
| <font color='red'>垂直滚屏</font> | 画面向上移动,并且从下方重复出现;需要注意:水平垂直滚屏只能存在一个 |
|
||||
| VHS | 画面带有横条和轻微抖动,有老式录像机的感觉 |
|
||||
| <font color='red'>水平滚屏+VHS</font> | 上面两个的叠加,实际上分开放两个物块效果也是一样的 |
|
||||
| <font color='red'>垂直滚屏+VHS</font> | 上面两个的叠加,实际上分开放两个物块效果也是一样的 |
|
||||
| 自定义滚屏 | 允许同时设置水平和垂直的滚屏,并且自由设置滚屏速度 |
|
||||
| 屏幕滚动 | 允许同时设置水平和垂直的滚屏,并且自由设置滚屏速度 |
|
||||
| 过场模式 | 屏幕上下方出现黑条,类似于很多游戏出过场动画时的效果 |
|
||||
| 按键低重音 | 每次按拍后画面产生震动和色像差 |
|
||||
| 鱼眼 | 用鱼眼镜头拍出来的效果,中间比其他部分更大(显得更靠近屏幕),强度可以是负数 |
|
||||
| | |
|
||||
| **画风突变类** | |
|
||||
| <font color='red'>黑屏</font> | <font color='red'>别多想,真的就是屏幕全黑了</font> |
|
||||
| 倒带 | 屏幕内容左右抽搐 |
|
||||
| 扫描线 | 屏幕被分割为许多极小横条,透明大横条从上往下循环移动 |
|
||||
| 噪点 | 就是那种老电视收不到信号的马赛克 |
|
||||
| 电影噪点 | 在保持画面的基础上加一些噪点 |
|
||||
| 色调偏移 | 改变画面的色调,每隔100%是一个色调循环 |
|
||||
| 亮度 | 改变画面的亮度,小于等于0的情况下等效于黑屏 |
|
||||
| 对比度 | 改变画面的色彩对比度,负数的情况下等效于反色 |
|
||||
| 饱和度 | 改变画面的色彩饱和度,负数的情况下等效于反色 |
|
||||
| <font color='red'>灰度</font> | <font color='red'>画面变成黑白灰的</font> |
|
||||
| 灰度 | 画面变成黑白灰的 |
|
||||
| 怀旧 | 画面发黄 |
|
||||
| JPEG失真 | 出现类似信号不稳定时的画面割裂效果 |
|
||||
| 像素化 | 画面变成一个个像素格,“数量”其实是格子的大小 |
|
||||
| 马赛克 | 与普通的打码不太一样,能感觉到画面依然清晰但是割裂成了一个个小格子 |
|
||||
| 点阵 | 画面变成一个个小点,类似于`5-1N`中的背景 |
|
||||
| 海底波浪 | 屏幕左右扭曲 |
|
||||
| 热变 | 受高温影响屏幕逐渐扭曲和失真 |
|
||||
| 玻璃碎裂 | 和`6-1`中一样的碎裂效果,一次性 |
|
||||
| 放克 | 精神污染,屏幕上滚动着高饱和度的纯色 |
|
||||
| 素描 | 添加一张揉皱的白纸背景,将原始画面自动抽取关键部分变成黑色画在纸上 |
|
||||
| 色像差 | 有点像红蓝眼镜3D视频不戴眼镜时看到的效果 |
|
||||
@@ -50,10 +57,15 @@
|
||||
| 矩阵 | 添加一个绿色音符上升的效果,和`1-XN`这关是一样的,可以和前景背景叠加起来显示 |
|
||||
| 落花 | 屏幕上方开始落下花瓣,可以和前景背景叠加起来显示 |
|
||||
| 落花即刻 | 屏幕上方落下花瓣,同时屏幕上已生成一些花瓣,可以和前景背景叠加起来显示 |
|
||||
| 落叶 | 屏幕上方开始落下落叶,可以和前景背景叠加起来显示 |
|
||||
| 飘雪 | 屏幕上方开始落下雪花,可以和前景背景叠加起来显示 |
|
||||
| 雪花 | 屏幕上方开始落下快速的雪花,短时间内充满屏幕,可以和前景背景叠加起来显示 |
|
||||
| 暴风雪 | 屏幕上方开始落下暴风雪,可以和前景背景叠加起来显示 |
|
||||
| 钻石 | 屏幕上出现很多方块 |
|
||||
| 气球 | 屏幕下方飘出很多气球 |
|
||||
| 余烬 | 屏幕上出现飘动的火星 |
|
||||
| 纸屑 | 屏幕上方落下各种颜色的纸屑 |
|
||||
| 彩纸爆破 | 屏幕左下角和右下角爆出彩纸,和`5-3N`中一样 |
|
||||
| 教程音符 | 屏幕铺满剧情模式教程中的音符背景,可以自定义颜色等 |
|
||||
| | |
|
||||
| **轨道类** | |
|
||||
@@ -64,7 +76,7 @@
|
||||
| <font color='red'>轨道全白</font> | 把轨道变成纯白色,需要事先布置一个轨道涂色物件 |
|
||||
| <font color='red'>轨道轮廓光</font> | 把轨道变成纯黑色白边,需要事先布置一个轨道涂色物件 |
|
||||
| <font color='red'>轨道普通</font> | 把轨道变成普通样子,需要事先布置一个轨道涂色物件 |
|
||||
| 波状轨道 | 轨道自己上下来回移动,类似于`2-3N`这关 |
|
||||
| 轨道浮动 | 轨道自己上下来回移动,类似于`2-2`这关 |
|
||||
| 脉冲计数 | 对普通拍子轨道有效,轨道上方随节奏出现1~7的数字,每个房间只能有一条轨道显示 |
|
||||
| 心跳震屏 | 每个心跳拍子都会让轨道抖动一下 |
|
||||
| 按键震屏 | 每个按键拍子都会让轨道抖动一下 |
|
||||
|
||||
@@ -1,44 +1,5 @@
|
||||
# 场景资源
|
||||
|
||||
## 背景和前景图片
|
||||
|
||||
在房间的前后关系里我们提到了背景图片和前景图片这两个概念,也就是说,除了使用编辑器内自带的一些主题之外,其实自己也是可以自定义画面的背景和前景图案的。这个功能同样十分灵活,但是如果想要完全靠自己来原创或是临摹背景图片的话,可能需要对画像素画有一些掌握。
|
||||
|
||||
选择紫色的版块,放置一个**设置背景**的事件,发现里面有两种形式,一种是纯色,这个比较好理解,唯独要注意的是**纯色的默认值是黑色而不是透明**,另一种是插入图片。
|
||||
|
||||
> 插入的图片必须是.png格式,如果你是自己画背景图,建议使用画布大小为352\*198像素。
|
||||
|
||||
颜色选项,看似意义不明,但其实也有一定的用处。如果你导入的图片只有纯白和透明两种颜色,这个功能就可以为纯白的部分染色,染成你自己设置的颜色。但是因为一次只能设置一种颜色,使用起来也有些限制。
|
||||
|
||||
缩放功能其实类似于操作系统里壁纸的填充方式,具体效果点开小箭头查看。
|
||||
|
||||
<details><summary><strong>填充方式</strong></summary>
|
||||
<img src="../images/assets-fillmode.png" alt="填充方式图例" />
|
||||
<ul>
|
||||
<li><strong>填满:</strong>将画面拉伸到横纵全部填满屏幕。要注意的是,如果你塞进去一张高清图,编辑器也会把它缩小到352\*198像素来适应画面,而且这个缩放机制是像素化的,画面会变得非常模糊。</li>
|
||||
<li><strong>拉伸:</strong>将画面等比拉伸直到左右垂直线对齐屏幕。</li>
|
||||
<li><strong>等比拉伸:</strong>将画面等比拉伸直到上下水平线对齐屏幕。</li>
|
||||
<li><strong>居中:</strong>就是按原画面大小放在正中间。</li>
|
||||
<li><strong>平铺:</strong>像铺瓷砖一样铺满屏幕。</li>
|
||||
</ul>
|
||||
</details>
|
||||
|
||||
> 如果你想做一个动图效果,需要把.gif拆解成一连串的.png图片,在选择图片时同时选择所有的图点击确定。接下来就会多出一个设置帧数的选项,来确定动图的播放速度。帧数 = \(背景图总画面数 / 一个循环占节拍数量\) \* 曲速/60。
|
||||
设置背景一样,但使用这个功能的主要目的还是为了能产生一个图片覆盖轨道和手的效果,这样在画面效果的处理上可以更加灵活。
|
||||
|
||||
## 平铺背景
|
||||
|
||||
唯独平铺选项会多冒出来一个速度设置,它可以让背景图片始终保持设置的速度移动。
|
||||
|
||||
* 在滚屏模式下,效果类似于<code>4-2</code>的天空在慢慢移动,速度和缓速则是调整背景从静止到目标速度的变化过程。
|
||||
* 在脉冲模式下,背景的移动速度变化就是周期性的,用<code>间隔</code>来调整周期。另外,如果你想设计这样的移动背景,在作画的时候也需要考虑画面左右两端和上下两端的连续,否则画面运动起来会感觉到割裂。
|
||||
|
||||
举个例子,公路,山坡,白云,蓝天的运动速度都不一样,毕竟在画面中的远近关系不一样,把他们分别画在四个背景图片里,放在四个房间,然后设置四个移动房间事件,把位置都改为`(50%, 50%)`,把大小都改为`(100%, 100%)`,设置四个背景图片,使用平铺的方式,设置不同的水平移动速度,就得到了在公路上慢慢前进的效果。
|
||||
|
||||

|
||||
|
||||
另外,使用小图片像地砖一样平铺才是更为原本的用法。
|
||||
|
||||
## 还原PV效果
|
||||
|
||||
有些音乐是自带PV/MV/BGA的,直接将原视频的风格或内容搬运到节奏医生中也不失为一种选择。但编辑器也有其自己的像素风格,有节奏医生自己的游戏特色,还原时也要讲究融合。
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
除了节奏音效和按拍音效之外,游戏里还有一些地方会出现音效,主要是失误的时候(分为微小失误和严重失误),没有节拍却按了空格的时候(默认是“啵”一声,所以在编辑器里面叫“手掌-啵音”),第七拍按下之后第八拍“咚”地一声回音(叫做心爆,这时候心脏图标也会小抖一下),以及跳过拍(嘎↘的声音),长按拍,冻结拍,灼热拍的音效。
|
||||
|
||||
这些音效在设置的时候是无法下拉列表选择更改的,只能通过键入游戏内置的音效文件名,或者导入自定义的音效来改变。目前已公开的内置音效文件名因为数量太多,集中收录在了[附录3](../appendix/3.html)中。
|
||||
这些音效在设置的时候是无法下拉列表选择更改的,只能通过键入游戏内置的音效文件名,或者导入自定义的音效来改变。目前已公开的内置音效文件名因为数量太多,集中收录在了[附录3](../pages/appendix_audios.md)中。
|
||||
|
||||
## 心爆
|
||||
|
||||
@@ -132,4 +132,4 @@ g 4 7 2 {
|
||||
## 播放音效
|
||||
**播放音效**是所有音效设置里面自由度最高的一个,可以在任意的时间开始播放一个音效文件,和游戏的轨道与按键没有任何关联。如果处理得当,你甚至可以用这个功能写一个打击乐段在游戏里面。
|
||||
|
||||
另外,剧情模式里面的内置音效也可以在这里通过写文件名的形式添加进自己的谱面。但是官方目前并没有公开所有的音效文件,我们收集了其中的一部分放在了[附录3](../appendix/3.html)中整理成了表格,需要的话可以自取。
|
||||
另外,剧情模式里面的内置音效也可以在这里通过写文件名的形式添加进自己的谱面。但是官方目前并没有公开所有的音效文件,我们收集了其中的一部分放在了[附录3](../pages/appendix_audios.md)中整理成了表格,需要的话可以自取。
|
||||
|
||||
@@ -1,4 +1,88 @@
|
||||
# 镜头移动
|
||||
# 房间与镜头
|
||||
|
||||
完全掌握了节奏医生的节奏设计之后,我们要把目光放在谱面的视觉呈现上了,这一节我们就从理解“房间”的概念开始。
|
||||
|
||||
编辑器总共支持四个房间,你可以想象成一栋房子有四层楼,每层楼最多住四个人,同时,每层楼的装修可以随意摆设互不干扰。这四层楼不一定刚刚好叠在一起,可以随时移动,互不交叠,只是高度不同。我们飞在空中从上往下看,就能看到目视所及范围内的大楼景象。同时,如果空中飘扬着其他物件,也会被我们的眼睛捕捉到,如果大楼的天花板和地板是透明的,那么地基里有什么东西也会被看到。
|
||||
|
||||
当我们使用**排列显示房间**事件时,房间就只能从上到下地排列在屏幕上,而如果使用**移动房间**事件,则可以随便移动。
|
||||
|
||||
## 排列显示房间
|
||||
|
||||

|
||||
|
||||
将左边的可见房间点亮为黄色,屏幕上就会显示这个房间,高度可以自定义,填写数据后房间高度将自动分配。详细的分配规则点击下方箭头展开。如果你懒得理解分配规则,只需永远保证 **不点亮多余的房间,并且将存在的房间高度总和设置到100%** 即可。
|
||||
|
||||
### 房间分配规则
|
||||
- 如果全部不填,那么
|
||||
所有房间高度为 `25%`;
|
||||
- 否则
|
||||
- 计算已填房间高度的总和 `Sum`
|
||||
- 如果 `Sum = 100%`,那么
|
||||
按实际数据设置房间高度,未填写的视为 `0%`;
|
||||
- 如果 `Sum < 100%`,那么
|
||||
- 如果有未填写房间高度的房间,设个数为 `n`,那么
|
||||
未填写高度的房间高度 `height = (100% - Sum) / n`,即均分未分配的房间高度;
|
||||
- 否则
|
||||
每个房间的房间高度 `height = height * 100% / Sum`,即等比例拉伸房间高度至高度总和为 `100%`;
|
||||
- 如果 `Sum > 100%`,那么
|
||||
每个房间的房间高度 `height = height * 100% / Sum`,即等比例缩小房间高度至高度总和为 `100%`;
|
||||
|
||||
下面还留有一个时长和缓速的选项,这个和轨道移动的时所介绍的设置规律是完全相同的。如果填写0拍就是瞬间完成房间分配。
|
||||
|
||||
> 如果你想直观地看看各种移动方式的速度区别,可以[看看这里](https://easings.net/zh-cn)。
|
||||
|
||||
## 房间的前后关系
|
||||
|
||||
但实际上很多时候我们并不想就让房间这样死板地上下排布,甚至想让这些房间交叠在一起。要做到这一点,我们得先明确各个房间叠在一起的时候,它们的前后关系是怎样的。
|
||||
|
||||

|
||||
|
||||
首先看一个房间内,各种事件的由前往后关系是:
|
||||
|
||||
> [浮动文字]
|
||||
[弹幕效果]
|
||||
[前景图片]
|
||||
[轨道4]
|
||||
[轨道3]
|
||||
[轨道2]
|
||||
[轨道1]
|
||||
[背景图片(图片)]
|
||||
[背景图片(颜色)]
|
||||
|
||||
它们的前后顺序是不可改变的。
|
||||
|
||||
各个房间整体之间又有前后顺序,默认由前往后关系是:
|
||||
|
||||
> [显示状态牌]
|
||||
[应用到:顶部]
|
||||
[房间1]
|
||||
[房间2]
|
||||
[房间3]
|
||||
[房间4]
|
||||
|
||||
四个房间的顺序是可以改变的,只需要在黄色版块内添加一个**重新排序房间**事件,把前后顺序拖动到想要的即可。
|
||||
|
||||

|
||||
|
||||
## 激活其他房间
|
||||
|
||||
在刚打开编辑器的状态下,实际上只能看到房间1。并不是另外三个房间不存在,而是房间大小被设置成了`0%`。在黄色版块中找到**移动房间**事件,事件放置在工作区的哪一行,就是对应的哪个房间被移动。创建三个移动房间事件置于234行,将“大小”设置为`(100%,100%)`,这样所有的房间都以屏幕大小叠在一起了。
|
||||
|
||||
还记得[这里](../pages/settheme.md)提到了**设置主题**事件吗,我们再添加一个“花房·昼”。由于黄色版块不再是空白的,设置主题的事件的右上角出现了新的按钮,这是将事件设置到具体房间的功能。
|
||||
|
||||

|
||||
|
||||
将带有花房·昼主题的事件选择房间4,预览效果会发现我们看到的依然是武士电子,因为现在不透明的房间1完全遮住了房间4。删掉武士电子主题,会发现背景全黑,依然看不到花房。这是因为默认状态下房间并不是透明背景,而是纯黑背景。
|
||||
|
||||
在紫色的版块找到**设置背景**事件,将背景颜色选择为纯透明,应用到123房间。再次预览,终于能看到房间4了。“应用到”选项是可以多选的。
|
||||
|
||||

|
||||
|
||||
有时还会有第五个按钮“顶部”,如果你理解了本节最开头的比喻的话,应用到顶部的事件是直接在大楼与你之间的空中生效的。房间怎么移动都不会影响到顶部。
|
||||
|
||||

|
||||
|
||||
经此示例,相信你已经能理解房间的基本运作原理了。
|
||||
|
||||
## 概述
|
||||
移动房间应该是整个编辑器内灵活性最高的功能之一了。它的灵活性本身并不是基于对编辑器功能的理解的,而是更类似于对摄影或是视频制作手法的理解。我们观看电影也总是会说“镜头语言”,这话同样适用于作谱。合理的镜头运用可以极大程度提升谱面的视觉观感。
|
||||
@@ -17,6 +101,8 @@
|
||||
|
||||
**1、**所谓的移动摄像头,画一个三维空间出来也许可以让你更好地理解。它就像是我们举着一台摄像机拍摄自己的家一样,你的手或者身子移动,那么摄像头跟着移动,拍摄下来的整体画面位置就会不同。
|
||||
|
||||
如果“真实运动”选择的是开启,那么摄像头就是记录房间内的画面,怎么移动都在房间内;选择关闭则是像看录像一样,移动时会露出边缘。
|
||||
|
||||

|
||||
|
||||
**2、**移动摄像头最基本的用法就是把摄像头跟着节奏晃来晃去,与全程静止不动的背景相比,这样会给谱面增加一些动感。这个轨道移动的弹跳设计原理是一样的,仅仅是呈现的画面效果稍显不同。
|
||||
@@ -54,11 +140,6 @@
|
||||
|
||||

|
||||
|
||||
**3、房间透明度**
|
||||
**淡入淡出房间**事件倒是没有太多可说的,调节的是房间整体的透明度。同样也可以选择时长和缓速模式。
|
||||
|
||||
最基本的用法就是把一个房间的透明度从`0`调到`100`,另一个从`100`调到`0`,完成淡入淡出的转场。
|
||||
|
||||
**4、排列显示房间**
|
||||
|
||||
在[这一节](../pages/room.md)我们介绍过这个功能,但是使用这个软件自带的排列显示房间有一个略显僵硬的限制:房间的上下关系是不可变更的。如果想要自己定义谁在上谁在下,那就不能再使用这个默认功能了,需要我们添加移动房间功能来实现。
|
||||
|
||||
@@ -31,9 +31,9 @@
|
||||

|
||||

|
||||
|
||||
## 配合自定义滚屏
|
||||
## 配合屏幕滚动
|
||||
|
||||
自定义滚屏这个**预设特效**和普通的移动房间不一样,他的屏幕是上下左右接续的。但是只要是移动的屏幕,自然就可以配合浮动文字。为了方便操控文字的出现,一般也可以考虑剪裁房间的大小,并且配合遮罩。接下来就只需要安排好文字出现和消失的时机,文字就会像弹幕一样播放起来了。
|
||||
屏幕滚动这个**预设特效**和普通的移动房间不一样,他的屏幕是上下左右接续的。但是只要是移动的屏幕,自然就可以配合浮动文字。为了方便操控文字的出现,一般也可以考虑剪裁房间的大小,并且配合遮罩。接下来就只需要安排好文字出现和消失的时机,文字就会像弹幕一样播放起来了。
|
||||
|
||||

|
||||
|
||||
@@ -43,8 +43,8 @@
|
||||
|
||||
| 预设特效 | 配合效果 |
|
||||
| :--- | :--- |
|
||||
| 自定义屏幕块 | 当然是把字也分成多块,没什么特别的 |
|
||||
| 自定义滚屏 | 见上面那段 |
|
||||
| 自定义屏幕分隔 | 当然是把字也分成多块,没什么特别的 |
|
||||
| 屏幕滚动 | 见上面那段 |
|
||||
| 黑屏 | 不出意外地全黑了 |
|
||||
| 噪点、干扰 | 对浮动文字无效 |
|
||||
| 电影噪点、高光、JPEG失真、马赛克、海底波浪 | 正常地产生效果 |
|
||||
|
||||
@@ -1,4 +1,165 @@
|
||||
# 其他文字事件
|
||||
# 文字事件
|
||||
|
||||
## 浮动文字基本设置
|
||||
|
||||
如果我们要制作一首歌曲的谱面,一般而言都会考虑将歌词显示在画面中,这是一种简单粗暴,但能快速提升整体观感的做法。要在画面中加上字幕,我们需要在紫色的版块中找到**浮动文字**事件。
|
||||
|
||||
选择这个事件后,我们可以发现最开始的两行很有Word的感觉。
|
||||
|
||||

|
||||
|
||||
**aA**:可以调整字号大小,字号基本上没有上限,如果设置太大的话,文字就会**超出屏幕**。
|
||||
|
||||
**旋转**:可以旋转浮动文字框,注意是**整个文本框的旋转**,而不是每个字单独旋转。
|
||||
|
||||
**AB**:两个颜色分别是字的颜色和字符描边的颜色,刚才所说的字号里面,**只会包含字符本体的大小**,描边是没有算在里面的。
|
||||
|
||||
**↔**:指定浮动文字横向的基准位置。
|
||||
|
||||
**↕**:指定浮动文字纵向的基准位置。
|
||||
|
||||

|
||||
|
||||
**字体**:可以强制文本是哪种字体,有像素字体(不支持中文)、矢量字体(中文默认显示的字体)和粗体字体(`2-X`判定文字同款)。点击旁边的文件夹图标可以自行导入ttf或otf格式字体文件。
|
||||
|
||||

|
||||
|
||||
**位置**:指的是基准的位置。可以按一下准星符号再在预览画面窗口中点选位置。有条件精准找到位置的话还是建议在`X`和`Y`栏中输入具体数值。**点击右边的`%`按键可以切换屏幕像素点和屏幕百分比两种输入方式**。
|
||||
|
||||

|
||||
|
||||
**文字**:就是输入文本的地方了。纯英文文本是使用的像素字体,带有中文字符的情况下会全部变成矢量字体,如果你想要纯英文文本也显示矢量字体的话,可以回车键再在第二行输入一些中文,如下图所示。当文字框里没有中文时就无法输入中文,需在游戏外部打好要插入的文本,并通过复制粘贴的方式输入。
|
||||
|
||||

|
||||
|
||||
另外,目前已知中文繁体以及日语假名都可以在画面中正常显示。
|
||||
|
||||

|
||||
|
||||
**创建文本递进**:如果想要把一整句歌词按歌词节奏一个一个地显示出来,就需要在文本中使用“`/`”将它们隔开。如果想要一个一个地覆盖掉之前显示的内容,就需要在文本中使用`回车键`将他们隔开。之后点击下面的“创建文本递进”,在工作区里面可以拖动右箭头事件来调整时机。如果你做好了又不想要了,那么再把下面的开启改成关闭即可,无需手动删除。如果你又反悔了,还是想要,再改成开启,又会恢复记录。
|
||||
|
||||
```rdview 8 3
|
||||
ea.FloatingText 1 1;
|
||||
ea.AdvanceText 2 1;
|
||||
ea.AdvanceText 3 1;
|
||||
ea.AdvanceText 4 1;
|
||||
ea.AdvanceText 5 1;
|
||||
ea.AdvanceText 6 1;
|
||||
ea.AdvanceText 7 1;
|
||||
```
|
||||
|
||||
音节的消失方式选择**淡出**就是慢慢消失,**立即**就是瞬间消失,音节显示的时长是按创建文本递进的最后一个事件往后数拍子的。
|
||||
|
||||
```rdview 13 3
|
||||
ea.FloatingText 1 1;
|
||||
g 3 1 4 1;
|
||||
g 7 1 0 1 #f80;
|
||||
ea.AdvanceText 3 1;
|
||||
g 8 1 4 1;
|
||||
g 12 1 0 1 #f80;
|
||||
ea.AdvanceText 8 1;
|
||||
```
|
||||
|
||||
## 更丰富的效果和技巧
|
||||
|
||||
这个模块的基本功能就是上面那些,但是实际使用起来其实非常灵活。如果想要制作视觉效果更为丰富的字幕,就需要我们打开脑洞,多去深挖这些基础功能。下面我举几个例子给大家做一些启发。
|
||||
|
||||
**1、**如果想一次性显示多行,需要在换行的地方加上`\n`。输入`\/`才能打出“/”。
|
||||
|
||||
**2、**文本旋转效果是整个文本框的旋转,如果想要做到每个字都旋转,那么同样需要添加多个浮动文字模块,添加相同的旋转角度。如果想要让文本围绕一个中心旋转,那么直接用准星功能去找位置会方便一些。
|
||||
|
||||
**3、**如果在同一时刻同一位置有多个不同的浮动文字,那么字在屏幕中的上下层顺序只和你添加事件的先后顺序有关,先加入的事件在下层,后加入的事件在上层。这个机制无法进行修改。
|
||||
|
||||
**4、**如果想要给文本做颜色渐变的效果,可以在相同时间相同位置添加两个浮动文字,其中一个消失方式选择淡出,另一个选择立即,这样就获得了渐变效果。
|
||||
|
||||
**5、**把文字递进里面添加很多错误的文字,然后全部一个字一个字回车,就可以做到文字在同一位置的乱码效果。
|
||||
|
||||
**6、**在文本的最后放一个竖线“\|”或者下划线“\_”就可以做出打字的效果了。
|
||||
|
||||

|
||||
|
||||
```
|
||||
ぼ|
|
||||
ぼく|
|
||||
僕|
|
||||
僕の|
|
||||
僕のゆ|
|
||||
僕のゆめ|
|
||||
僕の夢|
|
||||
僕の夢
|
||||
|
||||
そ|
|
||||
そう、|
|
||||
そう、わ|
|
||||
そう、わた|
|
||||
そう、わたし|
|
||||
そう、私|
|
||||
そう、私の|
|
||||
そう、私のゆ|
|
||||
そう、私のゆめ|
|
||||
そう、私の夢|
|
||||
```
|
||||
|
||||
**7、**创建了一组文本递进之后,只需要双击浮动文字事件本身,整组字幕都会被选中。不需要一个个手动去点选了。
|
||||
|
||||
**8、**基准的左中右会影响文本递进效果。靠左时从左向右出现文本递进;靠中时从中间挤向两侧出现文本递进;靠右时从右向左出现文本递进。
|
||||
|
||||
**9、**在文本框的最后加一个空行,就可以通过文本递进的方式设置文本的结束时间,避免了一点点数格子的烦恼。
|
||||
|
||||
**10、**在文字中的个别字符前面加上`<color=#RRGGBBAA>`,后面加上`</color>`可以改变这几个字的颜色和透明度。关于颜色的介绍由于篇幅关系将放在下一小节。
|
||||
|
||||

|
||||
|
||||
对应文本框内容为:
|
||||
|
||||
```html
|
||||
<color=red>Wel</color><color=orange>come </color><color=yellow>to </color><color=green>Won</color><color=aqua>der</color><color=blue>land</color><color=purple>!</color>`<br>
|
||||
<color=red>同</color><color=orange>赏</color><color=yellow>这</color><color=green>世</color><color=aqua>外</color><color=blue>景</color><color=purple>色</color>
|
||||
```
|
||||
|
||||
## 演示关卡
|
||||
|
||||
你以为这里会有一个我们制作的关卡?其实并不。在这里我想介绍的是官方联动关卡`MD-2`,不知道你们在游玩这关感受爆炸难度的同时有没有注意到字幕的表现?如果你没有什么印象的话可以先看看下面这个视频:
|
||||
|
||||
<div class="bv"><iframe src="https://player.bilibili.com/player.html?aid=374450491&page=56&autoplay=0" title="BPM 与偏移的校对教程" width="100%" height="100%" scrolling="no" frameborder="no" framespacing="0" allowfullscreen="true"></iframe></div>
|
||||
|
||||
看完之后我们再来回忆一下其中一段歌词的表现:
|
||||
|
||||
> `夜深了 月光也换了颜色`<br>
|
||||
> 【换了颜色】字体为黑色
|
||||
>
|
||||
> `要更迷幻更鲜艳眩目得赤裸`<br>
|
||||
> 【鲜艳炫目】字体为亮蓝色
|
||||
>
|
||||
> `我也将披上褪浅的音色`<br>
|
||||
> 【褪浅的音色】消失更早
|
||||
>
|
||||
> `逃离这个现实的现在时分的陷落`<br>
|
||||
> 这句意外的正常
|
||||
>
|
||||
> `像逆行在通往大人的公路`<br>
|
||||
> 【像逆行在】四个字是从右往左出现的,也就是位置基准改成了靠右
|
||||
>
|
||||
> `粉红的喇叭裤 墨镜里装星空`<br>
|
||||
> 【粉红】两字为粉红色,【星空】两字为蓝色和紫色
|
||||
>
|
||||
> `忽闪忽灭的影子中`<br>
|
||||
> 【忽】字反复出现和淡出了几次,【影子】是黑色
|
||||
>
|
||||
> `撞见了另一个我`<br>
|
||||
> 【另一个我】有两份文字略微偏移重叠在一起
|
||||
|
||||
有没有发现不管是颜色效果还是显示效果,在设计上都和歌词本身有着些许联系,也就让平淡无奇的歌词字幕一下子变得生动起来。
|
||||
|
||||
## 文本装饰
|
||||
|
||||
你可能已经注意到,**浮动文字**事件并没有移动文字的功能。如果想要移动文字,请移步绿色板块,点击加号创建装饰,选择“文本”。
|
||||
|
||||

|
||||
|
||||
创建一个**设置文本**事件,你会发现这个事件和浮动文字基本一样,相信你已经知道怎么用了。
|
||||
|
||||
这里的文本比起用浮动文字事件创建的文本功能更加齐全,不仅可以**移动装饰**,还可以**显示/隐藏**、**重排序:装饰**,等等。总之和精灵图差不多(如果想了解精灵图请看[这里](../pages/decoration.md#制作一个精灵)),这里就不过多赘述了。
|
||||
|
||||
## 显示对话
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 修改游戏版本
|
||||
# 修改游戏配置
|
||||
|
||||
## 说明
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
最后说明的是,不论你使用的是哪个版本,由于近期官方对编辑器的更新极为频繁,请务必将游戏更新设置为**始终保持此游戏为最新**,否则真的是……脑壳痛。
|
||||
|
||||
## 进入方式
|
||||
## 修改游戏版本
|
||||
|
||||
接下来介绍进入Beta版本的方法:
|
||||
|
||||
@@ -31,4 +31,20 @@
|
||||
|
||||
第四步,直接打开游戏即可。
|
||||
|
||||
> 一切准备就绪,那么开始我们的节奏医生编辑器中文教程吧!
|
||||
> 一切准备就绪,那么开始我们的节奏医生编辑器中文教程吧!
|
||||
|
||||
## 启用高级编辑器功能
|
||||
|
||||
从 v1.0.4 版本开始,高级编辑器功能被加入。其中包含一些在剧情关卡中使用,但之前不能在编辑器直接使用的功能。
|
||||
|
||||
要启用高级编辑器功能,首先按住 `tab`,然后你就会看到这个界面:
|
||||
|
||||

|
||||
|
||||
然后狂点右下角的凹兔,直到弹出这个窗口:
|
||||
|
||||

|
||||
|
||||
点击接受,此时高级编辑器功能就启用了。
|
||||
|
||||
如果你想关闭高级编辑器功能,只需要点一下 `tab` 界面右下角的凹兔即可。
|
||||
@@ -1,5 +1,69 @@
|
||||
# 更新信息
|
||||
|
||||
#### 2026-06-06
|
||||
- 更新 [VFX](../pages/vfx.md) 章节
|
||||
- 更新[镜厅](../pages/hallofmirror.md) 章节
|
||||
|
||||
#### 2026-03-25
|
||||
- 更新事件列表
|
||||
- 更新预设特效列表
|
||||
- 修正格式错误
|
||||
- 更改“设置窗口数量”译名为“设置窗口内容”
|
||||
- 补充 WindowDance 页内容
|
||||
- 更新轨道涂色属性页图片
|
||||
- 更新轨道重排序事件
|
||||
- 更新旋转轨道事件的详细内容
|
||||
- 更新默认轨道的各部分位置分布数值
|
||||
- 为改变轨道事件描述添加图片
|
||||
- 更新制作人员表
|
||||
|
||||
#### 2026-03-01
|
||||
- **变量**一节被替换为[表达式](../pages/expression.md)。
|
||||
- 为各种标题添加了容易辨识和定位的背景渐变条。
|
||||
- ~~我也要加入文档编撰列表吗(~~
|
||||
|
||||
#### 2026-02-26
|
||||
- 临时修复了若干资源查找问题
|
||||
- 同步音频列表
|
||||
|
||||
#### 2026-01-24
|
||||
- 制作人员表增加了
|
||||
|
||||
#### 2026-01-16
|
||||
- RDTKView(~~RDView2~~) 已完成部署
|
||||
|
||||
#### 2026-01-14
|
||||
- 制作人员表增加了
|
||||
- RDView 对正式版编辑器新特性的部分适配
|
||||
- 正在逐步同步 RDView2(RhythmBase.View) 的适配
|
||||
|
||||
#### 2025-11-29
|
||||
- 调整目录结构
|
||||
- 双人模式措辞更改
|
||||
- 移除 banner
|
||||
- 修改暗色主题部分颜色
|
||||
- 添加一项第三方工具介绍页面
|
||||
- 更改了群号
|
||||
- 添加了网页简介
|
||||
- 添加了制作人员名单
|
||||
- 更改了页面右侧功能区的样式
|
||||
- 大量修改内容布局,这包括
|
||||
- 场景资源
|
||||
- 房间与镜头
|
||||
- 文字事件
|
||||
- 镜厅
|
||||
- 轨道移动
|
||||
- 房间视效
|
||||
- 轨道视效
|
||||
- 基础 vfx 效果
|
||||
- 视觉干扰
|
||||
- 部分页面处于未完成状态,如
|
||||
- 基础 vfx 效果
|
||||
- 旧版教程已归档至[这里](https://2025.rd.rdlevel.cn)
|
||||
|
||||
#### 2025-11-02
|
||||
- [无障碍设计](../pages/accessibledesign.md)添加了屏幕朗读事件相关说明
|
||||
|
||||
#### 2025-10-27
|
||||
- 添加 Webhook
|
||||
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
|
||||
第二个选项“**摇摆**”就是剧情模式里老奶奶那样的摇摆普通拍子,可以使用拖动条来调节,对照下方绿色竖线的移动可以很直观地看到摇摆效果。不过拖动滑条你只能得到一些倍数十分规整的摇摆拍子,例如摇摆值为0.25,0.5,0.75等,如果你的音乐里真的有些更为不同寻常的摇摆幅度,那就要直接在框里填写数字了。
|
||||
|
||||
```rdview 8 9
|
||||
eb.AddClassicBeat 1 1[swing=0.25,tick=6];
|
||||
eb.AddClassicBeat 1 2[swing=0.5,tick=6];
|
||||
eb.AddClassicBeat 1 3[swing=0.75,tick=6];
|
||||
eb.AddClassicBeat 1 4[tick=6];
|
||||
eb.AddClassicBeat 1 5[swing=1.25,tick=6];
|
||||
eb.AddClassicBeat 1 6[swing=1.5,tick=6];
|
||||
eb.AddClassicBeat 1 7[swing=1.75,tick=6];
|
||||
```rdtkview 8 9
|
||||
{"beat": 2, "y": 1, "type": "AddClassicBeat", "row": 0, "tick": 1, "swing": 0.25, "hold": 0 },
|
||||
{"beat": 2, "y": 2, "type": "AddClassicBeat", "row": 0, "tick": 1, "swing": 0.5, "hold": 0 },
|
||||
{"beat": 2, "y": 3, "type": "AddClassicBeat", "row": 0, "tick": 1, "swing": 0.75, "hold": 0 },
|
||||
{"beat": 2, "y": 4, "type": "AddClassicBeat", "row": 0, "tick": 1, "swing": 1, "hold": 0 },
|
||||
{"beat": 2, "y": 5, "type": "AddClassicBeat", "row": 0, "tick": 1, "swing": 1.25, "hold": 0 },
|
||||
{"beat": 2, "y": 6, "type": "AddClassicBeat", "row": 0, "tick": 1, "swing": 1.5, "hold": 0 },
|
||||
{"beat": 2, "y": 7, "type": "AddClassicBeat", "row": 0, "tick": 1, "swing": 1.75, "hold": 0 }
|
||||
```
|
||||
|
||||
> 不要把摇摆程度拖到滑条的最右端,这样会产生一个不带`X`记号但只有2,4,6,7拍的节奏,无法读谱。
|
||||
@@ -28,6 +28,8 @@ eb.AddClassicBeat 1 7[swing=1.75,tick=6];
|
||||
|
||||
如何加入类似于`1-2亲密`的`X`记号呢?在生成一个节奏之后,点击“**切换为X字拍子设置**”就可以调节。需要注意的是:你需要在一串普通拍子开始的**同时**或是**之前**就放置好修饰拍子设置。如果在普通拍子已经响起之后再添加`X`,虽然画面上能即时生效,但是节拍音效是没法立刻改变的。
|
||||
|
||||
如果你在单发类型的轨道上放置`切换为X字拍子设置`,那么时间轴会卡住无法播放。
|
||||
|
||||
> 在没有节奏的地方放置一连串的“切换为X字拍子设置”来改变`X`的排布也可以视为一种画面演出。
|
||||
|
||||
当然,这个功能也不仅仅是为轨道加`X`,按下鼠标左键是加入`X`记号,按下鼠标右键一次是`↑`箭头记号,两次是`↓`箭头记号。按下鼠标中键一次是摇摆心跳记号,两次是抖动心跳记号。
|
||||
@@ -36,6 +38,8 @@ eb.AddClassicBeat 1 7[swing=1.75,tick=6];
|
||||
|
||||
> 尽量不要在第一拍设置`X`记号,这对纯音押玩家是不可预知的,在轨道数量多的情况下也会显得比较难理清节奏。如果你觉得你的音乐中这段节奏第一拍不放`X`就浑身难受,那也需要打开护士数拍(参考`X-WOT`这关中的`xx-----`)。
|
||||
|
||||
> 此外像马克的短轨道,需调用自定义方法来完成,语句为`SetRowLength(轨道编号[0索引的], 轨道长度[1~7的整数])`。如果你还不明白自定义方法是什么,需要先翻到[自定义方法](../pages/custommethod.md)看看。考虑到这玩意问的人比较多,所以就先写在此处了。
|
||||
|
||||
最后的选项“**分解为自由时长节拍**”较为复杂,我们放到[这里](/pages/moreclassicbeats)再介绍。
|
||||
|
||||
## 护士节奏提示
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||

|
||||
|
||||
**类型:**“**普通**”表示像武士一样的普通拍子节奏,“**单发**”表示像咖啡师一样的单发拍子节奏。需要注意的是,切换轨道类型的同时也会清空轨道上的所有节拍,因此建议在一开始就确定好轨道的类型。
|
||||
**类型:**“**普通**”表示像武士一样的普通拍子节奏,“**单发**”表示像咖啡师一样的单发拍子节奏。虽然现在单发和普通拍子可以共存,但需要注意的是,切换轨道类型的同时也会清空轨道上的所有节拍,因此建议在一开始就确定好轨道的类型。
|
||||
|
||||
**玩家:**P1,P2表示玩家1和玩家2,CPU表示电脑演示。
|
||||
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
- [卢毅](https://space.bilibili.com/26101629)
|
||||
- [RaYmondCheung](https://space.bilibili.com/1579208)
|
||||
- [NoMathExpectation](https://space.bilibili.com/184862524)
|
||||
- [0x4D2](https://space.bilibili.com/478595264)
|
||||
- [正宗的小绿君](https://space.bilibili.com/1782518253)
|
||||
- [kuanpan](https://space.bilibili.com/1928620300)
|
||||
- [obugs](https://space.bilibili.com/498017546)
|
||||
- [zyx](https://space.bilibili.com/2045355693)
|
||||
- 视频制作:
|
||||
- [吾夜犹明](https://space.bilibili.com/29219948)
|
||||
- [山不转水到渠成](https://space.bilibili.com/4870582)
|
||||
|
||||
@@ -90,6 +90,11 @@
|
||||
|
||||
`排位顺序`:同一时间设置多个自定义方法时,你可能需要让这些事件按一定顺序生效,这个时候就需要设置这个参数了。这个参数支持负数,数字越小,事件越早生效。
|
||||
|
||||
## 快捷查询
|
||||
|
||||
<div class="custommethods-search">
|
||||
</div>
|
||||
|
||||
## 我知道你还想问什么
|
||||
|
||||
你也许会有这种疑问:为什么官方要设置一个“调用自定义方法”,像写代码一样完成一些明明是很成熟的功能和特效?为什么不把它们也做成普通的事件直接添加就好了?
|
||||
|
||||
@@ -110,6 +110,21 @@
|
||||
|
||||
**时长与缓速:**同其他事件。
|
||||
|
||||
## 混合精灵图
|
||||
可以将精灵图的颜色与场景混合。
|
||||
|
||||
混合模式将进行以下计算(超过255的按255算,小于0按0算,小数四舍五入):
|
||||
|
||||
假设背景色为RGB(r1,g1,b1)
|
||||
|
||||
精灵图颜色为RGB(r2.g2.b2)
|
||||
|
||||
**附加(add 线性减淡)**模式显示的颜色为RGB(r1+r2,g1+g2,b1+b2)
|
||||
|
||||
**叠加(mul 正片叠底)**模式显示的颜色为RGB(r1*r2/255.g1*g2/255.b1*b2/255)
|
||||
|
||||
**反转(inv 反色)**模式显示的颜色为RGB(rl-r2,b1-b2,g1-g2)
|
||||
|
||||
## 精灵的使用技巧
|
||||
|
||||
**1、作为场景物体**
|
||||
|
||||
@@ -86,6 +86,8 @@
|
||||
|
||||
**另存为**:保存为额外的一个文件。
|
||||
|
||||
**测试**:直接开始游玩关卡。
|
||||
|
||||
**导出以发布**:导出以发布:将谱面导出为 .rdzip 文件,或将谱面上传至创意工坊。
|
||||
|
||||
**退出**:退出编辑器,记得先保存。
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
# 表达式
|
||||
|
||||
在节奏医生编辑器中,为了增加灵活性与可玩性,很多地方都支持使用表达式在游戏运行时动态决定实际的效果。这种表达式被称作 **RDCode**。
|
||||
|
||||
## 数据类型
|
||||
|
||||
类似于其他编程语言,RDCode 中有且仅有一些预定义的数据类型。
|
||||
|
||||
### 常量
|
||||
表示一个确定的值,其值在关卡制作时就已经确立。
|
||||
|
||||
### 变量
|
||||
表示一个不定的值,其值可能会在关卡运行过程中被赋值语句更改。
|
||||
|
||||
- **访问权限**
|
||||
为了保证关卡运行的稳定,一些变量会设置访问权限:
|
||||
- **只读**
|
||||
此变量可以参与表达式求值(读),但不能被赋值(写)。
|
||||
- **只写**
|
||||
此变量仅允许被赋值(写)而不能参与表达式求值(读)。
|
||||
- **可读写**
|
||||
此变量既能够参与表达式求值(读)也能够被赋值(写)。
|
||||
|
||||
- #### 整形(Integer/int)
|
||||
即整数。
|
||||
整形可以自动参与浮点型数据的数学运算。
|
||||
你可以直接使用整形常量并参加运算,例如 `2026`, `-308`, `999`, `0`。
|
||||
- #### 浮点型(Single/Float/float)
|
||||
可以带有小数部分的数字。
|
||||
例如 `3.1415`, `200.1`, `-9.99`。
|
||||
> 在将浮点型转换为整型的操作(如赋值操作)时,将遵循**向最近偶数舍入**的原则(与大多数编程语言中的**向下取整**原则不同),即若计算结果为 `0.5`,那么它对应的整数值为 `0`;而 `1.5` 将对应 `2`。
|
||||
- #### 布尔型(Boolean/bool)
|
||||
仅 `true` 或 `false` 以表示启用或禁用等。
|
||||
> 在**自定义方法**中,
|
||||
|
||||
- #### 字符串型(String/string)
|
||||
一串字符。
|
||||
不参与运算,仅在调用自定义方法时作为参数存在。
|
||||
值得注意的是,不同于其他语言的双引号 `"STRING"` 等表示方式,RDCode 的字符串表示是 `str:STRING`,即在字符串的前面加上一个 `str:` 前缀。
|
||||
一般而言,在 RDCode 内用到字符串型的地方都只能在一系列候选词中选择一个填入,例如在选择角色或缓速类型时。
|
||||
例如 `str:Samurai`, `str:Linear`
|
||||
|
||||
- #### 预定义变量
|
||||
节奏医生为整数、浮点数、布尔类型各预定义了 10 个可读写变量,分别以 `i`, `f`, `b` 开头,即 `i0`-`i9`, `f0`-`f9`, `b0`-`b9`。
|
||||
一些只读或只写的变量可在[自定义方法表](../pages/appendix_custommethods.md)查到。
|
||||
|
||||
## 运算类型
|
||||
|
||||
- **数学运算符**
|
||||
`+` `-` `*` `/` `%`
|
||||
- **逻辑运算符**
|
||||
`And` `Or` `Not`
|
||||
> 在 `And` `Or` 的两侧、`Not` 的右侧只支持布尔型数据。
|
||||
- **比较运算符**
|
||||
`>` `<` `>=` `<=` `==` `<>`
|
||||
- **函数调用**
|
||||
如 `Rand`, `IIf`, `atLeastRank`
|
||||
> 所有的可用的自定义方法请查阅[自定义方法表](../pages/appendix_custommethods.md)。
|
||||
> 表内标注的方法按照每个参数的含义及其类型表示,
|
||||
> 例如 `SetMistakeWeight(int RowID, float Weight)` 中,注明了此方法需要一个 int 类型(即整形)的值表示 RowID 和一个 float 类型(即浮点型)的值表示 Weight,
|
||||
> 你可以这样使用:`SetMistakeWeight(0, 2)`,表示将轨道 1 的错误权重设为 2。
|
||||
|
||||
## 语句类型
|
||||
只能在自定义方法中使用。
|
||||
|
||||
- **自增/自减**
|
||||
在变量后面添加 `++` 或 `--` 使变量本身加 1 或减 1。
|
||||
> 布尔变量不支持自增/自减。
|
||||
例如 `i2++`。
|
||||
|
||||
- **赋值**
|
||||
在变量和表达式之间使用 `=` 将变量的值设为表达式的值。
|
||||
例如 `f3 = 20 * f5`。
|
||||
|
||||
- **调用**
|
||||
调用[自定义方法](../pages/appendix_custommethods.md)。
|
||||
|
||||
## 表达式的用途
|
||||
|
||||
### 条件
|
||||
- 在使用[条件](../pages/condition.md)的自定义条件模式时,可以定义一个自定义条件,用于决定赋予此条件的事件能否在播放关卡时启用。
|
||||
- 在条件的表达式限制下我们难以直接写出用 `And` 或 `Or` 组合的形式;但是我们可以通过设立多个自定义条件并分别添加对应的表达式,应用于事件上,或是执行多次自定义表达式并赋值给预定变量,再在条件内组合。
|
||||
- 在**条件**内无法使用 `>=` `<=`。~~怀疑是史山代码发力了~~
|
||||
- 在**条件**内若有 `>` `<` 存在时不允许有括号嵌套。~~史山代码还在发力~~
|
||||
- 逻辑运算符的优先级比比较运算符更高。
|
||||
|
||||
### 自定义方法
|
||||
- 自定义方法中的表达式仅在赋值和调用行为时才能使用,其中赋值时以 `[变量]=[表达式]` 形式将对应的变量设为计算后的值,调用时将表达式填入对应的参数的位置。
|
||||
例如 `b0 = b1 Or Not b2 And 3 > f2`。
|
||||
- 自增或自减运算的左值仅能使用变量名,不能使用表达式。
|
||||
- 在将布尔型数据转换为整形或浮点型的操作(如参与数学运算)时,其值将退化为整形,其中 `true` 对应 `1`,`false` 对应 `0`。
|
||||
- 在将整形或浮点型数据转换为布尔型的操作(如赋值操作)时,其值将遵循**非 `0` 即 `true`** 的原则,即若计算结果为 `0`,那么它对应的布尔值为 `false`,否则为 `true`。
|
||||
- 实际上在**自定义方法**内进行数学运算时,所有数据都将转换为浮点型再参与运算。
|
||||
- 比较运算符的优先级比逻辑运算符更高。
|
||||
- `Rand` 方法既不能包含表达式形式的参数,也不能参与计算。
|
||||
|
||||
### 自定义方法(注释)
|
||||
- 注释型自定义方法的参数不支持表达式,仅支持单独的值或变量。
|
||||
|
||||
### 事件参数
|
||||
- 部分事件的属性支持填入表达式,如移动轨道、移动精灵图的位置、轴点、尺寸、角度等。
|
||||
- 需要用花括号 `{}` 将表达式括起来以表示这是一个表达式。
|
||||
- 其他同**自定义方法**。
|
||||
|
||||
### 内插字符串
|
||||
- 部分事件的字符串类型属性支持将表达式插入字符串,如浮动文字、显示状态牌等。
|
||||
- 需要用花括号 `{}` 将表达式括起来以表示游戏需要将表达式的值替换表达式插入原字符串中。
|
||||
- 其他同**自定义方法**。
|
||||
@@ -1,148 +0,0 @@
|
||||
# 浮动文字
|
||||
|
||||
## 浮动文字基本设置
|
||||
|
||||
如果我们要制作一首歌曲的谱面,一般而言都会考虑将歌词显示在画面中,这是一种简单粗暴,但能快速提升整体观感的做法。要在画面中加上字幕,我们需要在紫色的版块中找到**浮动文字**事件。
|
||||
|
||||
选择这个事件后,我们可以发现最开始的两行很有Word的感觉。
|
||||
|
||||

|
||||
|
||||
**aA**:可以调整字号大小,字号基本上没有上限,如果设置太大的话,文字就会**超出屏幕**。
|
||||
|
||||
**旋转**:可以旋转浮动文字框,注意是**整个文本框的旋转**,而不是每个字单独旋转。
|
||||
|
||||
**AB**:两个颜色分别是字的颜色和字符描边的颜色,刚才所说的字号里面,**只会包含字符本体的大小**,描边是没有算在里面的。
|
||||
|
||||
**↔**:指定浮动文字横向的基准位置。
|
||||
|
||||
**↕**:指定浮动文字纵向的基准位置。
|
||||
|
||||

|
||||
|
||||
**位置**:指的是基准的位置。可以按一下准星符号再在预览画面窗口中点选位置。有条件精准找到位置的话还是建议在`X`和`Y`栏中输入具体数值。**点击右边的`%`按键可以切换屏幕像素点和屏幕百分比两种输入方式**。
|
||||
|
||||

|
||||
|
||||
**文字**:就是输入文本的地方了。纯英文文本是使用的像素字体,带有中文字符的情况下会全部变成矢量字体,如果你想要纯英文文本也显示矢量字体的话,可以回车键再在第二行输入一些中文,如下图所示。当文字框里没有中文时就无法输入中文,需在游戏外部打好要插入的文本,并通过复制粘贴的方式输入。
|
||||
|
||||

|
||||
|
||||
另外,目前已知中文繁体以及日语假名都可以在画面中正常显示。
|
||||
|
||||

|
||||
|
||||
**创建文本递进**:如果想要把一整句歌词按歌词节奏一个一个地显示出来,就需要在文本中使用“`/`”将它们隔开。如果想要一个一个地覆盖掉之前显示的内容,就需要在文本中使用`回车键`将他们隔开。之后点击下面的“创建文本递进”,在工作区里面可以拖动右箭头事件来调整时机。如果你做好了又不想要了,那么再把下面的开启改成关闭即可,无需手动删除。如果你又反悔了,还是想要,再改成开启,又会恢复记录。
|
||||
|
||||
```rdview 8 3
|
||||
ea.FloatingText 1 1;
|
||||
ea.AdvanceText 2 1;
|
||||
ea.AdvanceText 3 1;
|
||||
ea.AdvanceText 4 1;
|
||||
ea.AdvanceText 5 1;
|
||||
ea.AdvanceText 6 1;
|
||||
ea.AdvanceText 7 1;
|
||||
```
|
||||
|
||||
音节的消失方式选择**淡出**就是慢慢消失,**立即**就是瞬间消失,音节显示的时长是按创建文本递进的最后一个事件往后数拍子的。
|
||||
|
||||
```rdview 13 3
|
||||
ea.FloatingText 1 1;
|
||||
g 3 1 4 1;
|
||||
g 7 1 0 1 #f80;
|
||||
ea.AdvanceText 3 1;
|
||||
g 8 1 4 1;
|
||||
g 12 1 0 1 #f80;
|
||||
ea.AdvanceText 8 1;
|
||||
```
|
||||
|
||||
## 更丰富的效果和技巧
|
||||
|
||||
这个模块的基本功能就是上面那些,但是实际使用起来其实非常灵活。如果想要制作视觉效果更为丰富的字幕,就需要我们打开脑洞,多去深挖这些基础功能。下面我举几个例子给大家做一些启发。
|
||||
|
||||
**1、**如果想一次性显示多行,需要在换行的地方加上`\n`。输入`\/`才能打出“/”。
|
||||
|
||||
**2、**文本旋转效果是整个文本框的旋转,如果想要做到每个字都旋转,那么同样需要添加多个浮动文字模块,添加相同的旋转角度。如果想要让文本围绕一个中心旋转,那么直接用准星功能去找位置会方便一些。
|
||||
|
||||
**3、**如果在同一时刻同一位置有多个不同的浮动文字,那么字在屏幕中的上下层顺序只和你添加事件的先后顺序有关,先加入的事件在下层,后加入的事件在上层。这个机制无法进行修改。
|
||||
|
||||
**4、**如果想要给文本做颜色渐变的效果,可以在相同时间相同位置添加两个浮动文字,其中一个消失方式选择淡出,另一个选择立即,这样就获得了渐变效果。
|
||||
|
||||
**5、**把文字递进里面添加很多错误的文字,然后全部一个字一个字回车,就可以做到文字在同一位置的乱码效果。
|
||||
|
||||
**6、**在文本的最后放一个竖线“\|”或者下划线“\_”就可以做出打字的效果了。
|
||||
|
||||

|
||||
|
||||
```
|
||||
ぼ|
|
||||
ぼく|
|
||||
僕|
|
||||
僕の|
|
||||
僕のゆ|
|
||||
僕のゆめ|
|
||||
僕の夢|
|
||||
僕の夢
|
||||
|
||||
そ|
|
||||
そう、|
|
||||
そう、わ|
|
||||
そう、わた|
|
||||
そう、わたし|
|
||||
そう、私|
|
||||
そう、私の|
|
||||
そう、私のゆ|
|
||||
そう、私のゆめ|
|
||||
そう、私の夢|
|
||||
```
|
||||
|
||||
**7、**创建了一组文本递进之后,只需要双击浮动文字事件本身,整组字幕都会被选中。不需要一个个手动去点选了。
|
||||
|
||||
**8、**基准的左中右会影响文本递进效果。靠左时从左向右出现文本递进;靠中时从中间挤向两侧出现文本递进;靠右时从右向左出现文本递进。
|
||||
|
||||
**9、**在文本框的最后加一个空行,就可以通过文本递进的方式设置文本的结束时间,避免了一点点数格子的烦恼。
|
||||
|
||||
**10、**在文字中的个别字符前面加上`<color=#RRGGBBAA>`,后面加上`</color>`可以改变这几个字的颜色和透明度。关于颜色的介绍由于篇幅关系将放在下一小节。
|
||||
|
||||

|
||||
|
||||
对应文本框内容为:
|
||||
|
||||
```html
|
||||
<color=red>Wel</color><color=orange>come </color><color=yellow>to </color><color=green>Won</color><color=aqua>der</color><color=blue>land</color><color=purple>!</color>`<br>
|
||||
<color=red>同</color><color=orange>赏</color><color=yellow>这</color><color=green>世</color><color=aqua>外</color><color=blue>景</color><color=purple>色</color>
|
||||
```
|
||||
|
||||
## 演示关卡
|
||||
|
||||
你以为这里会有一个我们制作的关卡?其实并不。在这里我想介绍的是官方联动关卡`MD-2`,不知道你们在游玩这关感受爆炸难度的同时有没有注意到字幕的表现?如果你没有什么印象的话可以先看看下面这个视频:
|
||||
|
||||
<div class="bv"><iframe src="https://player.bilibili.com/player.html?aid=374450491&page=55&autoplay=0" title="BPM 与偏移的校对教程" width="100%" height="100%" scrolling="no" frameborder="no" framespacing="0" allowfullscreen="true"></iframe></div>
|
||||
|
||||
看完之后我们再来回忆一下其中一段歌词的表现:
|
||||
|
||||
> `夜深了 月光也换了颜色`<br>
|
||||
> 【换了颜色】字体为黑色
|
||||
>
|
||||
> `要更迷幻更鲜艳眩目得赤裸`<br>
|
||||
> 【鲜艳炫目】字体为亮蓝色
|
||||
>
|
||||
> `我也将披上褪浅的音色`<br>
|
||||
> 【褪浅的音色】消失更早
|
||||
>
|
||||
> `逃离这个现实的现在时分的陷落`<br>
|
||||
> 这句意外的正常
|
||||
>
|
||||
> `像逆行在通往大人的公路`<br>
|
||||
> 【像逆行在】四个字是从右往左出现的,也就是位置基准改成了靠右
|
||||
>
|
||||
> `粉红的喇叭裤 墨镜里装星空`<br>
|
||||
> 【粉红】两字为粉红色,【星空】两字为蓝色和紫色
|
||||
>
|
||||
> `忽闪忽灭的影子中`<br>
|
||||
> 【忽】字反复出现和淡出了几次,【影子】是黑色
|
||||
>
|
||||
> `撞见了另一个我`<br>
|
||||
> 【另一个我】有两份文字略微偏移重叠在一起
|
||||
|
||||
有没有发现不管是颜色效果还是显示效果,在设计上都和歌词本身有着些许联系,也就让平淡无奇的歌词字幕一下子变得生动起来。
|
||||
@@ -1,85 +1,138 @@
|
||||
# 镜厅
|
||||
|
||||
> 预警放在最前面:观看本节教程图片可能会引发光敏性癫痫,在编辑器中使用此功能也请慎重处理。
|
||||
## 镜厅的本质
|
||||
正常情况下,游戏每一帧绘制前都会清空屏幕(填充黑色),然后重新绘制所有物件。这保证了上一帧的画面不会残留。
|
||||
**但是如果不重置呢?**
|
||||
镜厅(Hall of Mirror) 就是关闭这个清空操作。上一帧的画面保留在屏幕上,新画面直接叠加在上面。
|
||||
|
||||
> 本节动图较多,如遇加载卡顿,请耐心等待。
|
||||
你可以尝试:
|
||||
- 添加一个会移动的轨道或精灵(如一个向右匀速移动的豆子盒)
|
||||
- 在预设特效中添加"镜厅"
|
||||
- 播放关卡
|
||||
你会发现,方块不再是一个清晰的个体,而是一条向右延伸的 "尾巴"。
|
||||
这是每一帧的方块叠加在一起形成的拖影。
|
||||
> 镜厅在 "主题设置" 和 "预设特效" 中都有,但请使用预设特效版本。主题设置是全局开关且难以与其他特效组合,预设特效可以灵活控制。
|
||||
|
||||
所谓的镜厅效果,就是画面在变化的时候并不清除变化过程中产生的效果,画面效果会一直叠加,然后逐渐变得混乱。
|
||||
如果不加控制,每一帧都叠加新画面,屏幕很快会被完全填满。我们需要一种机制让旧的画面逐渐淡出。
|
||||
|
||||
<div class="bv"><iframe src="https://player.bilibili.com/player.html?bvid=BV1vW411t7NF&page=18&autoplay=0" title="BPM 与偏移的校对教程" width="100%" height="100%" scrolling="no" frameborder="no" framespacing="0" allowfullscreen="true"></iframe></div>
|
||||
## 抑制方法
|
||||
|
||||
镜厅一共能在两个地方找到,一是设置主题中的 “镜厅”,二是预设特效中的“镜厅”。**但最好使用预设特效中的**。
|
||||
### 亮度衰减
|
||||
|
||||
如果只是直接使用镜厅加上预设特效,效果一般只会越来越阴间,所以我们一般会使用预设特效里的“晕影”和“闪烁晕影”或者半透明的背景或半透明的后背景板闪光(由于设备性能差别,镜厅的效果显示可能每个人会有所不同,我一般使用20的透明度)来起到抑制的效果,同时这样也能直接做出最简单的拖尾效果。
|
||||
假设一个亮度为 100 的像素每帧向右移动 1 像素,且每帧绘制前整个画面亮度衰减为原来的 50%:
|
||||
|
||||

|
||||
| 帧 | 亮度 ||||
|
||||
|-|-:|-:|-:|-:|
|
||||
|1|100|
|
||||
|2|50|100|
|
||||
|3|25|50|100|
|
||||
|4|12.5|25|50|100|
|
||||
|
||||
拖尾效果(可以注意到镜厅留下了痕迹 ,如果想去除就需要再加上其他的效果,比如-1强度的高光)。这里再附上一些特效在遮罩后的组合(默认都已经打开了镜厅)。
|
||||
衰减率决定拖尾长度。
|
||||
节奏医生没有直接的 "衰减率" 参数,但可以通过以下方式模拟:
|
||||
|
||||

|
||||

|
||||

|
||||
#### 半透明黑色背景覆盖
|
||||
添加一个黑色背景板
|
||||
设置透明度为 20%(即每帧覆盖 20% 不透明黑色,相当于 80% 亮度保留)
|
||||
在元素移动时,原来留下的影子会逐渐被黑色覆盖,形成拖影的效果。
|
||||

|
||||

|
||||
|
||||
#### 晕影特效
|
||||
添加预设特效"晕影"或"闪烁晕影"
|
||||
晕影会从边缘向中心逐渐覆盖,产生柔和的拖影抑制
|
||||

|
||||
|
||||
一般来说直接用这些效果是不会太好的,用的时候会使用更多其他的特效进行组合。
|
||||
### 位移扭曲
|
||||
除了亮度衰减,还可以让历史画面发生位移,产生流动感。
|
||||
|
||||
### 反色(HOMVERT)
|
||||
---
|
||||
|
||||
镜厅+反色的结果往往是会让眼睛难以承受的高频闪烁,因此直接使用是禁止的,但是加上一点遮罩就可以避免这种结果。
|
||||
#### 基础位移效果
|
||||
在镜厅基础上添加屏幕滚动:x = 1, y = 1
|
||||
配合 20% 透明度黑色背景
|
||||
元素朝左上方向流动的同时会一直复制画面本身叠印起来。
|
||||

|
||||

|
||||
|
||||

|
||||
#### 屏幕分隔扭曲
|
||||
添加屏幕分隔特效:x = 2, y = 2
|
||||
画面被划分为 2×2 的块,同时会叠上原来的画面。
|
||||

|
||||
|
||||
另外,值得一提的是护士语音自带的灯光实际上是一片反色的区域,因此如果使用了镜厅,就要注意是否产生了镜厅反色(实在没办法也可以用音效代替直接使用语音来避免出现灯光)。
|
||||
### 区域控制
|
||||
镜厅是全屏效果,但有时你只想部分区域有拖影,或者需要保护某些区域不被拖影污染。
|
||||
|
||||
### 背景
|
||||
---
|
||||
|
||||
如果直接使用背景加上镜厅使用是不会有效果的,但如果我们把背景的颜色设成半透明在加上镜厅就能在保留背景的情况下加上镜厅的效果。
|
||||
#### 反色遮罩
|
||||
镜厅 + 反色(HOMVERT)会产生高频闪烁,极其伤眼,**禁止直接使用**。
|
||||
通常使用镜厅 + 反色 + 20% 透明度黑色背景的组合。
|
||||
黑色背景作为遮罩层,可以降低反色区域的对比度,消除闪烁
|
||||
> 护士语音自带的灯光是反色区域,使用镜厅时需注意,或用音效代替语音避免灯光。
|
||||
|
||||

|
||||

|
||||
|
||||
如果图片本身有透明部分,则镜厅的效果会只在透明的部分显示。
|
||||
#### 背景遮罩
|
||||
直接使用背景 + 镜厅无效果(背景完全覆盖,没有透明区域供镜厅显示)。
|
||||
设置背景为半透明(如 50% 透明度),镜厅效果只在背景的透明部分显示
|
||||
> 如果图片本身有透明通道(如 PNG),镜厅会自动只在透明区域产生拖影。
|
||||
|
||||

|
||||
|
||||
### 顶部镜厅
|
||||
|
||||
预设特效里的镜厅除了四个房间外,还可以选择在“顶部”生效,这样就能做出只用房间做不出的效果,或者通过缩放和移动房间让整个房间受到镜厅影响。我们可以利用这个干很多事。
|
||||
### 房间控制
|
||||
预设特效中的镜厅有两个作用域:
|
||||
- 四个房间:仅影响关卡内的游戏区域
|
||||
- 顶部:影响整个屏幕,包括 UI 和边框
|
||||
|
||||
#### 顶部镜厅
|
||||
##### 边框绘制
|
||||
使用顶部镜厅 + 特定物件移动
|
||||
拖影会在屏幕边缘形成 "画框" 效果
|
||||

|
||||
|
||||
##### 万花筒
|
||||
顶部镜厅 + 旋转 / 缩放房间
|
||||
整个画面产生对称的镜像拖影
|
||||

|
||||
|
||||
直接在使用主题的房间使用镜厅是不会有效果的,但如果设置透明背景再使用顶部镜厅就能起到作用(需要注意的是,有些主题设置的时候会自动设置一些效果,可以在设置主题后0.0001拍再设置其他效果来避免与主题冲突)。
|
||||
#### 房间透明化
|
||||
直接使用主题 + 镜厅无效果(主题背景不透明)。
|
||||
设置主题后,在 0.0001 拍时添加其他特效(避免与主题自动设置冲突)
|
||||
设置透明背景 + 顶部镜厅
|
||||
或者将主题放在单独房间,将该房间设为半透明,轨道物件叠加在上方
|
||||
|
||||

|
||||
|
||||
对于本身没有透明部分的主题,我们可以把主题单独放在一个房间然后把那个房间半透明化,之后把轨道单独叠在那个房间上面来达成效果。
|
||||
## 组合
|
||||
镜厅不是单独使用的特效,而是基础层。真正丰富的效果来自组合。
|
||||
|
||||
### 透明化
|
||||
### 控制维度
|
||||
|
||||
虽然在大部分情况下使用了镜厅就意味着房间的背景不再能透明,但在少数特效影响下的情况是可以的。
|
||||
维度 | 特效示例 | 作用
|
||||
---- | -------------------- | -----------------
|
||||
衰减 | 黑色背景透明度、晕影 | 控制拖尾长度
|
||||
位移 | 滚屏、海底波浪 | 让拖影流动 / 扭曲
|
||||
颜色 | 高光、反色、VHS | 改变拖影色彩
|
||||
遮罩 | 背景透明度、屏幕分隔 | 限制镜厅作用区域
|
||||
|
||||

|
||||

|
||||
### 经典组合参考
|
||||
- 拖尾基础:镜厅 + 20% 黑色背景 + 晕影
|
||||
- 流动拖尾:镜厅 + 海底波浪 (0% 强度) + 20% 黑色背景
|
||||
- 方块拖影:镜厅 + 屏幕分隔 (2×2) + 晕影
|
||||
- 蓝色光晕:镜厅 + 蓝色高光 + 晕影
|
||||
- 复古故障:镜厅 + VHS + 电影噪点
|
||||
- 雨夜效果:镜厅 + 落雨 (负数强度) + 高光 (负数强度)
|
||||
### 透明化特例
|
||||
某些特效会让背景在镜厅下保持透明:
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
也有一些特效会让背景半透明。
|
||||
|
||||

|
||||

|
||||
|
||||
与之相对的,也有部分特效会让镜厅无法透明,加上其他的特效也一样。
|
||||
|
||||

|
||||

|
||||
|
||||
### 特殊效果
|
||||
|
||||
镜厅其实不只能用来做特效,也可以用来做一些特殊的效果。比如用来画画或者猜单词,当然这些都是一般用不到且比较难实现的,放在这里只是让你们知道一下。
|
||||
|
||||
### 组合
|
||||
|
||||
上面提到的都是镜厅的一些基本的用法。但做谱的时候不可能只用这些效果,这样是做不出花样来的。要做出更多变数,就要尝试更多的组合,甚至把组合再组合,这样就能做出很多不同的效果。在想不到怎么做特效的时候这是个很好用的方法试的时候也要注意效果不能太伤眼,也不是叠的特效越多越好。丰富谱面的内容才是第一目的。
|
||||
|
||||
与此同时,我们也要知道,镜厅只是做谱时的一种手段,做特效如果只是一味的试各种特效还不去了解其他方面,是没法提高的。希望你们做谱的时候能够合理使用镜厅,让内容更丰富。
|
||||
某些特效会强制背景不透明:
|
||||

|
||||

|
||||
|
||||
## 一些陈旧的示例
|
||||
|
||||
@@ -120,13 +173,13 @@
|
||||
|
||||

|
||||
|
||||
### 镜厅 + 屏幕块
|
||||
### 镜厅 + 屏幕分隔
|
||||
|
||||
这个需要配合晕影使用,不然也会直接崩坏。
|
||||
|
||||

|
||||
|
||||
要注意屏幕块是可以填写小数的,例如填写`x = 1.05, y = 1`,自定义闪烁透明度`15%~0%`。
|
||||
要注意屏幕分隔是可以填写小数的,例如填写`x = 1.05, y = 1`,自定义闪烁透明度`15%~0%`。
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||

|
||||
|
||||
如果不对其添加任何其他设置,那么轨道就会自动变成 `—x—x—x————♥` 的模式,像`4-1`这关的矿工一样,也就是在1,3,5,7拍有按压的动画效果。当然你可以在“设置X标记”这个项目里面选择跳过节拍的形式,默认有三种情况,如果想使用“切换为修饰拍子设置”来自由决定跳过也是可以的,先在“设置X标记”里面选择NO,然后设置好自己决定的修饰拍子就行了。
|
||||
如果不对其添加任何其他设置,那么轨道会延续上一个“切换为修饰拍子设置”的模式,当然你可以在“设置X标记”这个项目里面选择跳过节拍的形式,默认有三种情况,比如选`—x—x—x`轨道就会自动变成 `—x—x—x————♥` 的模式,像`4-1`这关的矿工一样,也就是在1,3,5,7拍有按压的动画效果。
|
||||
|
||||
```rdview 7 3
|
||||
eb.AddClassicBeat 3 1[tick=3,hold=0.3,swing=0.5];
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
制作一个自制谱的第一步就是导入一首音乐。虽然编辑器本身对音频文件格式无严格要求,但还是**请使用.ogg格式的音频文件**,以减少出BUG的可能性,对后续的调整偏移和选关界面试听也有帮助。如果你需要.ogg格式但是手头只有.mp3可以使用[aconvert](https://www.aconvert.com/cn/audio/mp3-to-ogg)等软件转换。**音乐的文件名尽量只包含字母、数字和半角符号**。
|
||||
|
||||
点击左上角的**菜单→新关卡**来创建新关卡,编辑器会帮我们选择到默认位置(C:\用户\你自己的用户名\文档\Rhythm Doctor)。如果你有长期做谱的需求,建议另取一个独立文件夹,会方便管理。在这个文件夹里创建的文件夹,就代表着你制作的不同的谱面。创建文件夹后进入,输入好谱面文件名,点击确定,就成功创建了一个谱面。
|
||||
点击左上角的**菜单→新关卡**来创建新关卡,编辑器会帮我们选择到默认位置(`C:\用户\你自己的用户名\文档\Rhythm Doctor`)。如果你有长期做谱的需求,建议另取一个独立文件夹,会方便管理。在这个文件夹里创建的文件夹,就代表着你制作的不同的谱面。创建文件夹后进入,输入好谱面文件名,点击确定,就成功创建了一个谱面。
|
||||
|
||||
> 在编辑已保存的关卡时,编辑器会每隔 5 分钟在此关卡相同目录生成一个 `backup.rdlevel` 备份文件并覆盖原有 `backup.rdlevel` 文件,如果做到一半编辑器崩了没保存就可以打开这个文件来恢复数据。
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
## 调整曲速和偏移
|
||||
|
||||
接下来一点十分重要,那就是调节BPM,也就是一分钟有多少拍的意思,只有设置对了BPM才能让游戏节奏和音乐速度保持一致。排除掉一些变速曲我们可以用[ArrowVortex](https://arrowvortex.ddrnl.com/)。或者你不想额外下载软件的话,也有一些在线网站可以测试,比如[all8](https://www.all8.com/tools/bpm.htm)。
|
||||
接下来一点十分重要,那就是调节BPM(Beats Per Minute,每分钟节拍数),只有设置对了BPM才能让游戏节奏和音乐速度保持一致。如果你在制作的曲目是匀速的,可以使用一些软件如 [ArrowVortex](https://arrowvortex.ddrnl.com/),或是一些在线网站,比如[all8](https://www.all8.com/tools/bpm.htm)。
|
||||
|
||||
调整好BPM之后还需要调整偏移。我们看一下下面波形图案,点击`‐`和`+`两个按钮进行缩小和放大。
|
||||
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
<div class="intro"></div>
|
||||
<div onclick="location.href='https://www.bilibili.com/opus/1095830097776082950';" class="notice">
|
||||
<p>2026节奏医生拜年纪活动正在招募中!</p>
|
||||
</div>
|
||||
|
||||
# 节奏医生中文编辑器教程
|
||||
|
||||
> 此网页正在维护中。
|
||||
> 此网页正在活跃维护中。
|
||||
网页已开源至[此处](https://git.obugs.cn/RDCNWebs/rd.rdlevel.cn),欢迎投稿。
|
||||
|
||||
> 页面内的大部分事件栏板块包含点击互动。尝试点击以获得更生动的演示。
|
||||
@@ -16,10 +13,11 @@
|
||||
编辑器视频教程点击[此链接](https://www.bilibili.com/video/BV1pr4y1k7gP)。教程内所有演示关卡下载放置于[百度网盘](https://pan.baidu.com/s/1Tb6ywVmge25ztMFnpa6q_Q),提取码:rdlv。
|
||||
|
||||
## 联系我们
|
||||
<div class="qqgroup">
|
||||
<img src="../images/intro-qqgroup2.png" data-no-zoom alt="我们的 QQ 1044116596"/><p>我们的 QQ 群号是: 1044116596</p>
|
||||
</div>
|
||||
|
||||

|
||||
|
||||
如果你有做谱相关的问题,或是对本教程有什么意见和建议,可以点击链接加入 QQ 群 [951070053](https://jq.qq.com/?_wv=1027&k=nsPA09E4) 告知我们。你也可以在群里上传谱面给我们试玩,群友们都会热心为你提供谱面优化建议。真诚欢迎各位做谱萌新和大佬的加入。
|
||||
如果你有做谱相关的问题,或是对本教程有什么意见和建议,可以点击链接加入 QQ 群 [1044116596](https://qm.qq.com/q/giuo0RDv4Q) 告知我们。你也可以在群里上传谱面给我们试玩,群友们都会热心为你提供谱面优化建议。真诚欢迎各位做谱萌新和大佬的加入。
|
||||
|
||||
(悄悄透露一句:官方也入驻了这个群哦~)
|
||||
|
||||
|
||||
@@ -49,18 +49,21 @@ eb.PulseFreeTimeBeat 9 0[pulse=9];
|
||||
|
||||
## 切分音(Syncopation)
|
||||
|
||||
切分音的概念不难理解,拍子的数量仍然为七个,但是最后一个拍子响起的时间是在6.5拍的时候,即提早了半拍。这少的半拍时间是可以发生在任意相邻两拍之间的。早期版本的编辑器需要使用自由拍来制作切分音,现在在**切换为X字拍子设置**里,点亮激活拍子下方的`->>>>>-`符号,就会将这一拍的时间缩短一半。每个轨道最多只能设置一个切分音位置。
|
||||
切分音的概念不难理解,拍子的数量仍然为七个,但是最后一个拍子响起的时间是在6.5拍的时候,即提早了半拍。这少的半拍时间是可以发生在任意相邻两拍之间的。早期版本的编辑器需要使用自由拍来制作切分音,现在在**切换为X字拍子设置**里,点亮激活拍子下方的`> > >`符号,就会将这一拍的时间缩短一半并自动添加提示音。每个轨道最多只能设置一个切分音位置。
|
||||
|
||||

|
||||
|
||||
**如何提示**
|
||||
添加完后会发现多了几个选项,各个选项效果如下:
|
||||
|
||||
> 1. 将轨道边缘染成黄色(参考颜色: `#FFFF00FF` )
|
||||
> 2. 在切分发生前的奇数拍使用“切分音嘟声-低”音效
|
||||
> 3. 在切分发生后的第一拍使用“切分音嘟声-中”音效
|
||||
> 4. 在第7拍使用“切分音嘟声-高”音效
|
||||
**摇摆**:设置切分后的按拍点距离原来的提前了(拍长*摇摆)拍。
|
||||
|
||||
需要额外注意的是,无论拍子之中是否有`X`,切分的第一个提示音、最后一个提示音以及可能存在的切分中音效都要保留,只有剩下的切分低音效是可以自行选择放置与否的。
|
||||
**音量&音高**:设置提示音的音量和音高。
|
||||
|
||||
**样式**:设置提示音的样式,鸣声是剧情模式里用到的,嘟声则是社区创造的,用哪种都可以。
|
||||
|
||||
**修饰拍子出现/消失音效**:只在使用鸣声样式才会有,用来提示切分音的出现和消失,嘟声则不需要。
|
||||
|
||||
需要额外注意的是,无论拍子之中是否有`X`,切分出现/消失和切分后第一拍的音效必须保留,只有剩下的音效是可以自行选择放置与否的。
|
||||
|
||||
## 八拍子(8 Beats)
|
||||
|
||||
@@ -83,7 +86,7 @@ eb.PulseFreeTimeBeat 8 1[pulse=9];
|
||||
> 1. 将轨道边缘染成红色(参考颜色: `#FF0000FF` )
|
||||
> 2. 在第1拍使用 `beep_mid.ogg` 自定义音效
|
||||
|
||||
不要使用内置的 `sndBeepMid` 音效!
|
||||
也可以使用内置的 `sndBeepMid` 音效。
|
||||
|
||||
八拍子也可以是摇摆拍,只需要将所有偶数拍选择并拖动即可变成摇摆拍:
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@ eb.AddOneshotBeat 5.25 2[tick=0.75];
|
||||
eb.AddOneshotBeat 3[];
|
||||
es.SayReadyGetSetGo_Get 1 1[];
|
||||
es.SayReadyGetSetGo_Set 2 1[];
|
||||
es.SayReadyGetSetGo_Go 3 1[];
|
||||
es.SayReadyGetSetGo_One 3 1[];
|
||||
```
|
||||
|
||||
如果相同拍长的方块单发拍连续出现了多次,无需为每次出现添加完整的护士提示。可以逐步减少护士提示,直到完全没有护士提示,只剩下特殊提示音。
|
||||
@@ -179,7 +179,7 @@ es.SayReadyGetSetGo_Go 3 1[];
|
||||
|
||||
与方块单发拍的概念类似,**细分拍**也是“一次性”的单发拍,但是会产生多次等间距的心跳脉冲,按键的次数也变为多次。
|
||||
|
||||
细分拍最早出现于`MD-1`,当时官方谱面没有官方名称,且最多仅有两个三角拍;后来第五章更新后三角拍首次出现在`5-1`并正式更名为**细分拍**,并出现了多个细分。
|
||||
细分拍最早出现于`MD-1`,当时官方谱面没有官方名称,且最多仅有两个三角拍;后来第五章更新后三角拍首次出现在`5-1`并正式更名为**细分拍**,并出现了多个细分;在关卡`5-2N`中最多涉及到了五级细分;正式版更新后,在关卡`7-X2`中甚至有了八细分。
|
||||
|
||||
在修饰符中选择方块后,将细分数量设为大于 1 的值或者点击细分符号`△`,即可创建细分拍。特殊音效的添加与方块单发拍类似。最多可以将细分数量设置为 10 。
|
||||
|
||||
@@ -338,6 +338,52 @@ g 0 -1 3 2 #0000[offset=0 1]{
|
||||
};
|
||||
```
|
||||
|
||||
## 长按单发拍
|
||||
|
||||
长按单发拍第一次出现在`7-1`
|
||||
|
||||
当听到`咻噗`的声音时,说明下一次击拍需要长按到下一个出拍点。
|
||||
|
||||
在修饰符中选中进度条符号就创建了一个长按单发拍,会多出`间隔`与`长按提示选项`选项。
|
||||
|
||||

|
||||
|
||||
对于长按单发拍,一共有四个关键的时间点:十字,出拍点(绿线),按拍点(黄线),长按(紫色格子)。
|
||||
```rdtkview 5 3
|
||||
{ "bar": 1, "beat": 3, "y": 2, "type": "AddOneshotBeat","interval": 2, "tick": 1, "hold": true }
|
||||
```
|
||||
|
||||
- **十字**显示长按单发拍子的提示音。
|
||||
- **绿线**代表单发拍会在此响一次。
|
||||
- **黄线**表示长按的起始点,也就是说玩家应当从这里开始长按。
|
||||
- **紫格**就是此次长按所需的时间。
|
||||
- **绿线**与**黄线**之间的间隔就是`拍长`的时间。
|
||||
- **十字**与**黄线**或者**绿线**与**紫格**末端之间的间隔就是`间隔`的时间。
|
||||
|
||||
在`长按提示`有三个选项,分别是:自动、偏早、偏晚。
|
||||
|
||||
- 选择**偏早**时,`十字`的位置会在`绿线`之前。
|
||||
- 选择**偏晚**时,`十字`不会显示,但提示音会与`绿线`重合。
|
||||
- 选择**自动**时:
|
||||
- 若**拍长**小于或等于1,则像`偏早`一样,长按单发拍子的提示音会在`绿线`之前;
|
||||
- 若**拍长**大于1,则像`偏晚`一样,`十字`不会显示,但提示音会与`绿线`重合。
|
||||
|
||||
```rdtkview 5 5
|
||||
{ "bar": 1, "beat": 3, "y": 2, "type": "AddOneshotBeat","interval": 2, "tick": 1, "hold": true },
|
||||
{ "bar": 1, "beat": 3, "y": 3, "type": "AddOneshotBeat","interval": 2, "tick": 1, "hold": true },
|
||||
{ "bar": 1, "beat": 3, "y": 4, "type": "AddOneshotBeat","interval": 2, "tick": 1, "hold": true }
|
||||
```
|
||||
|
||||
若设计长按单发拍,还必须满足松手音效与提示音不可重叠
|
||||
|
||||
如果需要在长按单发拍上叠加多个拍子来凸显鼓点,可以将他们的按拍点放在同一位置。
|
||||
|
||||
```rdtkview 5 3
|
||||
{ "bar": 1, "beat": 1.5, "y": 2, "tick": 2.5, "type": "AddOneshotBeat" },
|
||||
{ "bar": 1, "beat": 2.5, "y": 2, "tick": 1.5, "type": "AddOneshotBeat" },
|
||||
{ "bar": 1, "beat": 3, "y": 2, "type": "AddOneshotBeat","interval": 2, "tick": 1, "hold": true }
|
||||
```
|
||||
|
||||
最后我们针对细分拍、冻结拍、灼热拍做一个技术总结:
|
||||
|
||||
```rdview 19 7
|
||||
|
||||
@@ -1,18 +1,49 @@
|
||||
# 轨道移动
|
||||
|
||||
## 轨道的显示与隐藏
|
||||
## 默认轨道位置
|
||||
|
||||
轨道在关卡进行的过程中是可以随时调整其显示和隐藏状态的,这个功能可在紫色版块的**隐藏轨道**中找到。打开后有三个设置项:
|
||||
|
||||

|
||||
当我们在同一房间里设置了多个轨道的时候,角色位置会自动生成在屏幕上。不同的轨道数量下默认的位置也会不同:
|
||||
|
||||
**轨道**:要显示/隐藏的是哪条轨道。注意一次只能选择一个,所以如果需要大批量地显示和隐藏只能一点点加入事件了。
|
||||
* 一根轨道在屏幕的`(9.94%, 50.00%)`处
|
||||
* 两根轨道在屏幕的`(9.94%, 60.61%)`,`(9.94%, 39.39%)`处
|
||||
* 三根轨道在屏幕的`(9.94%, 71.21%)`,`(9.94%, 50.00%)`,`(9.94%, 28.79%)`处
|
||||
* 四根轨道在屏幕的`(9.94%, 81.82%)`,`(9.94%, 60.61%)`,`(9.94%, 39.39%)`,`(9.94%, 18.18%)`处
|
||||
|
||||
**动作**:四个选项(显示/隐藏/仅显示角色/仅显示轨道),显示和隐藏比较好理解;仅显示角色的意思是没有中间的横线和右边的心脏;仅显示轨道的意思是没有左边的人物图。
|
||||

|
||||
|
||||
> 如果你想要不显示心脏,最简单的办法是使用移动轨道事件将心脏移到屏幕外。如果想要隐藏所有轨道的心脏,也可以通过调用自定义方法 invisibleHeart = true 来实现,参考[自定义方法](../pages/custommethod.md)。
|
||||
> 此图片已过时,正确的请看下面:
|
||||
|
||||
**过渡方式**:顺滑(有烟雾特效);即刻(瞬间显示/隐藏);全动画(仅限“动作”中选择“显示”,有完整的出场及轨道延伸动画)。
|
||||
<div class="theme-positions" id="theme-positions">
|
||||
<div class="column ccharacter"></div>
|
||||
<div class="column c1"></div>
|
||||
<div class="column c2"></div>
|
||||
<div class="column c3"></div>
|
||||
<div class="column c4"></div>
|
||||
<div class="column c5"></div>
|
||||
<div class="column ccenter"></div>
|
||||
<div class="column c6"></div>
|
||||
<div class="column c7"></div>
|
||||
<div class="column cheart"></div>
|
||||
<div class="row r1"></div>
|
||||
<div class="row r2"></div>
|
||||
<div class="row r3"></div>
|
||||
<div class="row r4"></div>
|
||||
<div class="row r5"></div>
|
||||
<div class="row r6"></div>
|
||||
<div class="row r7"></div>
|
||||
<div class="selectbox"></div>
|
||||
<div class="infobox">
|
||||
<p class="per"><span class="x"></span>, <span class="y"></span></p>
|
||||
<p class="px"><span class="x"></span>, <span class="y"></span></p>
|
||||
<p class="other"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
此处的坐标原点为屏幕左下角,轨道的参考位置是人物像素画的中心点。如果任其按默认位置排布,会显得有些缺乏设计感。
|
||||
|
||||

|
||||
|
||||
## 轨道的移动
|
||||
|
||||
@@ -40,6 +71,8 @@
|
||||
|
||||
**缓速:**动画的速度变化,可自行尝试。这东西在很多需要持续一段时间的特效里都会存在,里面会有很多模式,只要把握以下原则就能快速明白了:`In`代表由慢至快,`Out`代表由快至慢,`InOut`代表由慢至快再变慢。后面不同的形式也就是快慢速的细微差距,可以根据自己的需要慢慢尝试。
|
||||
|
||||
**加速/减速:**在一段时间内加速/减速,相当于自定义缓速。如果此处填写`0`则是瞬间完成加速/减速。填写负数则视为`0`。
|
||||
|
||||
> 如果你想直观地看看各种移动方式的速度区别,可以[看看这里](https://easings.net/zh-cn)。
|
||||
|
||||
## 轴点
|
||||
@@ -87,6 +120,58 @@
|
||||
|
||||
5、**移动角色和心脏:**角色和心脏的移动是以他们在轨道中的位置为原点来移动的,比如填写`x: 0, y: 20px`则角色或者心脏向上移动20个像素。你可以使用这个功能把整个轨道挪到屏幕外面去,再以此为原点把心脏挪回来,就可以做到在屏幕内只显示心脏。
|
||||
|
||||
## 旋转轨道
|
||||
|
||||
> 目前该事件还不稳定,部分动作可能与轨道移动有冲突。
|
||||
|
||||
如果想要实现`6-2`马克一人多轨的情况就可以使旋转轨道事件。
|
||||
|
||||
### 连接
|
||||
|
||||

|
||||
|
||||
将`轨道`**连接**`到轨道`。
|
||||
|
||||
### 断开
|
||||
|
||||

|
||||
|
||||
将`轨道`**断开**。
|
||||
|
||||
### 旋转
|
||||
|
||||

|
||||
|
||||
将`轨道`**旋转**`角度`度。
|
||||
|
||||
### 均速旋转
|
||||
|
||||

|
||||
|
||||
`轨道`在每拍**均速旋转**`角度`。
|
||||
|
||||
### 波动旋转
|
||||
|
||||

|
||||
|
||||
`轨道`在每拍`频率`次**波动旋转**`增幅`度。
|
||||
|
||||
### 合并
|
||||
|
||||

|
||||
|
||||
将`轨道`转到`角度`度是**合并**。
|
||||
|
||||
### 分割
|
||||
|
||||

|
||||
|
||||
将`轨道`从主轨道上**分割**出来,并旋转到`角度`度。
|
||||
|
||||
## 轨道重排序~~重排序:行~~
|
||||
|
||||
将轨道转移到其他房间,或者改变轨道的层级
|
||||
|
||||
## 演示关卡
|
||||
|
||||
版面已经占的有些多了,更多的轨道移动脑洞我们留在演示关卡中间。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 05 单发拍子
|
||||
# 单发拍子
|
||||
|
||||
## 单发拍子功能介绍
|
||||
|
||||
@@ -182,12 +182,12 @@ g 7 1 1 1{
|
||||

|
||||

|
||||
|
||||
`摇晃`就是像`4-4`那关一样的摇晃效果。
|
||||
|
||||
选中一个单发拍子,按住`Shift + H`,会发现多出了一个爱心脉冲的修饰符。启用这个修饰符,可以将单发拍的形状变成`2-X`结尾的超大爱心。
|
||||
|
||||

|
||||
|
||||
> 此外像`4-4`关的抖动轨道单发拍子,需调用自定义方法来完成,语句为`wobblyLines = true`。如果你还不明白自定义方法是什么,需要先翻到[自定义方法](../pages/custommethod.md)看看。考虑到这玩意问的人比较多,所以就先写在此处了。
|
||||
|
||||
## 演示关卡
|
||||
|
||||
最后依然是呈上一个示范谱面。
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
# 房间
|
||||
|
||||
完全掌握了节奏医生的节奏设计之后,我们要把目光放在谱面的视觉呈现上了,这一节我们就从理解“房间”的概念开始。
|
||||
|
||||
编辑器总共支持四个房间,你可以想象成一栋房子有四层楼,每层楼最多住四个人,同时,每层楼的装修可以随意摆设互不干扰。这四层楼不一定刚刚好叠在一起,可以随时移动,互不交叠,只是高度不同。我们飞在空中从上往下看,就能看到目视所及范围内的大楼景象。同时,如果空中飘扬着其他物件,也会被我们的眼睛捕捉到,如果大楼的天花板和地板是透明的,那么地基里有什么东西也会被看到。
|
||||
|
||||
当我们使用**排列显示房间**事件时,房间就只能从上到下地排列在屏幕上,而如果使用**移动房间**事件,则可以随便移动。
|
||||
|
||||
## 排列显示房间
|
||||
|
||||

|
||||
|
||||
将左边的可见房间点亮为黄色,屏幕上就会显示这个房间,高度可以自定义,填写数据后房间高度将自动分配。详细的分配规则点击下方箭头展开。如果你懒得理解分配规则,只需永远保证 **不点亮多余的房间,并且将存在的房间高度总和设置到100%** 即可。
|
||||
|
||||
### 房间分配规则
|
||||
- 如果全部不填,那么
|
||||
所有房间高度为 `25%`;
|
||||
- 否则
|
||||
- 计算已填房间高度的总和 `Sum`
|
||||
- 如果 `Sum = 100%`,那么
|
||||
按实际数据设置房间高度,未填写的视为 `0%`;
|
||||
- 如果 `Sum < 100%`,那么
|
||||
- 如果有未填写房间高度的房间,设个数为 `n`,那么
|
||||
未填写高度的房间高度 `height = (100% - Sum) / n`,即均分未分配的房间高度;
|
||||
- 否则
|
||||
每个房间的房间高度 `height = height * 100% / Sum`,即等比例拉伸房间高度至高度总和为 `100%`;
|
||||
- 如果 `Sum > 100%`,那么
|
||||
每个房间的房间高度 `height = height * 100% / Sum`,即等比例缩小房间高度至高度总和为 `100%`;
|
||||
|
||||
下面还留有一个时长和缓速的选项,这个和轨道移动的时所介绍的设置规律是完全相同的。如果填写0拍就是瞬间完成房间分配。
|
||||
|
||||
> 如果你想直观地看看各种移动方式的速度区别,可以[看看这里](https://easings.net/zh-cn)。
|
||||
|
||||
## 房间的前后关系
|
||||
|
||||
但实际上很多时候我们并不想就让房间这样死板地上下排布,甚至想让这些房间交叠在一起。要做到这一点,我们得先明确各个房间叠在一起的时候,它们的前后关系是怎样的。
|
||||
|
||||

|
||||
|
||||
首先看一个房间内,各种事件的由前往后关系是:
|
||||
|
||||
> [浮动文字]
|
||||
[弹幕效果]
|
||||
[前景图片]
|
||||
[轨道4]
|
||||
[轨道3]
|
||||
[轨道2]
|
||||
[轨道1]
|
||||
[背景图片(图片)]
|
||||
[背景图片(颜色)]
|
||||
|
||||
它们的前后顺序是不可改变的。
|
||||
|
||||
各个房间整体之间又有前后顺序,默认由前往后关系是:
|
||||
|
||||
> [显示状态牌]
|
||||
[应用到:顶部]
|
||||
[房间1]
|
||||
[房间2]
|
||||
[房间3]
|
||||
[房间4]
|
||||
|
||||
四个房间的顺序是可以改变的,只需要在黄色版块内添加一个**重新排序房间**事件,把前后顺序拖动到想要的即可。
|
||||
|
||||

|
||||
|
||||
## 激活其他房间
|
||||
|
||||
在刚打开编辑器的状态下,实际上只能看到房间1。并不是另外三个房间不存在,而是房间大小被设置成了`0%`。在黄色版块中找到**移动房间**事件,事件放置在工作区的哪一行,就是对应的哪个房间被移动。创建三个移动房间事件置于234行,将“大小”设置为`(100%,100%)`,这样所有的房间都以屏幕大小叠在一起了。
|
||||
|
||||
还记得[这里](../pages/settheme.md)提到了**设置主题**事件吗,我们再添加一个“花房·昼”。由于黄色版块不再是空白的,设置主题的事件的右上角出现了新的按钮,这是将事件设置到具体房间的功能。
|
||||
|
||||

|
||||
|
||||
将带有花房·昼主题的事件选择房间4,预览效果会发现我们看到的依然是武士电子,因为现在不透明的房间1完全遮住了房间4。删掉武士电子主题,会发现背景全黑,依然看不到花房。这是因为默认状态下房间并不是透明背景,而是纯黑背景。
|
||||
|
||||
在紫色的版块找到**设置背景**事件,将背景颜色选择为纯透明,应用到123房间。再次预览,终于能看到房间4了。“应用到”选项是可以多选的。
|
||||
|
||||

|
||||
|
||||
有时还会有第五个按钮“顶部”,如果你理解了本节最开头的比喻的话,应用到顶部的事件是直接在大楼与你之间的空中生效的。房间怎么移动都不会影响到顶部。
|
||||
|
||||

|
||||
|
||||
经此示例,相信你已经能理解房间的基本运作原理了。
|
||||
@@ -1,5 +1,10 @@
|
||||
# 房间视效
|
||||
|
||||
## 房间透明度
|
||||
**淡入淡出房间**事件倒是没有太多可说的,调节的是房间整体的透明度。同样也可以选择时长和缓速模式。
|
||||
|
||||
最基本的用法就是把一个房间的透明度从`0`调到`100`,另一个从`100`调到`0`,完成淡入淡出的转场。
|
||||
|
||||
## 房间遮罩
|
||||
|
||||
### 图片遮罩
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
|
||||
> 当你把透明度调节为`0%`并打开轨道边框时,就会看到轨道线是插入进人物和心脏的像素图的。
|
||||
|
||||
**心:**修改心脏的贴图,比如马克的分心、万圣节的南瓜心、被网好卡菌感染的紫心等。
|
||||
|
||||
**时长与缓速:**和其他特效中的完全一致,不过多赘述。
|
||||
|
||||
> 如果你想直观地看看各种移动方式的速度区别,可以[看看这里](https://easings.net/zh-cn)。
|
||||
@@ -56,6 +58,33 @@
|
||||
|
||||

|
||||
|
||||
|
||||
## 轨道的显示与隐藏
|
||||
|
||||
轨道在关卡进行的过程中是可以随时调整其显示和隐藏状态的,这个功能可在紫色版块的**隐藏轨道**中找到。打开后有三个设置项:
|
||||
|
||||

|
||||
|
||||
**轨道**:要显示/隐藏的是哪条轨道。注意一次只能选择一个,所以如果需要大批量地显示和隐藏只能一点点加入事件了。
|
||||
|
||||
**动作**:四个选项(显示/隐藏/仅显示角色/仅显示轨道),显示和隐藏比较好理解;仅显示角色的意思是没有中间的横线和右边的心脏;仅显示轨道的意思是没有左边的人物图。
|
||||
|
||||
> 如果你想要不显示心脏,最简单的办法是使用移动轨道事件将心脏移到屏幕外。如果想要隐藏所有轨道的心脏,也可以通过调用自定义方法 invisibleHeart = true 来实现,参考[自定义方法](../pages/custommethod.md)。
|
||||
|
||||
**过渡方式**:顺滑(有烟雾特效);即刻(瞬间显示/隐藏);全动画(仅限“动作”中选择“显示”,有完整的出场及轨道延伸动画)。
|
||||
|
||||
## 改变轨道
|
||||
|
||||
可以在中途改变轨道上的角色。
|
||||
|
||||

|
||||
|
||||
**轨道**:需要改哪个轨道上的角色。
|
||||
|
||||
**角色**:改成哪个角色。
|
||||
|
||||
**过渡方式**:跟隐藏轨道一样,顺滑有烟雾特效,即刻没有。
|
||||
|
||||
## 适合配合轨道或节拍一起使用的特效
|
||||
|
||||
**闪烁:**屏幕白色闪烁,分为短,中,长三种。
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# 关卡播放与跳转
|
||||
|
||||
## 设置播放方式
|
||||
|
||||
**设置播放方式**(在紫色板块中),作用是设置关卡的播放方式,比如说,跳转到某个小节,或者循环播放某个小节。
|
||||
|
||||

|
||||
|
||||
**下一小节**是将要跳转到的小节,如果勾选了`相对`,那么这个数字就是相对于当前小节的数字。
|
||||
|
||||
> 比如说,当前小节是第3小节,**下一小节**填写了4,则若勾选`相对`将跳转到第7小节,不勾选`相对`则跳转到第4小节。
|
||||
|
||||
播放方式有以下几种:
|
||||
|
||||
- **正常**:正常播放完当前小节,然后跳转。
|
||||
- **循环**:循环播放当前小节。(如果选择**循环**,则没有**下一小节**)
|
||||
- **延长**:~~据笔者实验,似乎是无限延长当前小节~~笔者不确定它的作用,待补充。
|
||||
- **立即**:播放完这一拍之后,立即跳转。
|
||||
- **超级立即**: 立即跳转。
|
||||
- **延长下一拍**:~~据笔者实验,似乎与**正常**差别不大,但若在小节最后一拍,不会跳转~~笔者不确定它的作用,待补充。
|
||||
|
||||
## 前往关卡
|
||||
|
||||
**前往关卡**(也在紫色板块中),顾名思义,就是前往某个关卡。(为了方便叙述~~偷懒~~,下文中将**当前关卡**称为**a关卡**,**要前往的关卡**称作**b关卡**)但要注意,a关卡和b关卡需在同一文件夹中。导出a关卡时,b关卡会打包进a关卡的rdzip里。
|
||||
|
||||
**前往关卡**事件有两个用法,一个是直接`前往关卡`,另一个是先`设置下一个`关卡再`前往下一个`关卡。后者需要两个**前往关卡**事件。
|
||||
|
||||
你可能会问,为什么要用两个事件,先`设置下一个`再`前往下一个`~~,这不是脱裤子放屁吗~~?这是因为,只有先`设置下一个`关卡,才能有`跳过`功能。这里我们先按下不表,详见后文[制作教程关卡](#制作教程关卡)。
|
||||
|
||||

|
||||
|
||||
**淡入**:设置是否淡入。
|
||||
|
||||
**立即开始**:设置在b关卡开始前,是否显示`按空格键开始`的画面。
|
||||
|
||||
**保留失误**:这条很好理解,设置是否将a关卡的失误数带入b关卡。
|
||||
|
||||
**阻止重启按钮**:这条的名称可能有点迷惑。它的作用实际上是:在**已经跳转到b关卡后**,当点击重启按钮时,如果它被勾选,那么将**从a关卡开始**,而不是从b关卡开始;反之,如果它未被勾选,则从b关卡开始。
|
||||
|
||||
## 制作教程关卡
|
||||
|
||||
为什么把这两个事件一起介绍呢?原因就是,它们最常见的场景都是在**教程关卡**中使用。什么是**教程关卡**?相信只要你玩过主线,对它不会陌生,它是在正式关卡开始前,对**新出现的机制或节奏**的介绍与教学。一般都长这样:
|
||||
|
||||

|
||||
|
||||
想要实现在教程结束之后跳转到正式关卡,就需要用**前往关卡**事件。
|
||||
|
||||
你想必知道,官方的**教程关卡**都可以在菜单里`跳过`,要实现这个功能,就得在关卡开头放上`动作`为`设置下一个关卡`的**前往关卡**事件,并且勾选**允许跳过按钮**。再在结尾放上`动作`为`前往下一个关卡`的**前往关卡**事件。
|
||||
|
||||
那么,**设置播放方式**在**教程关卡**中有什么用呢?如果你节奏感一般~~像我一样~~,可能就会发现,官方的**教程关卡**中,如果你在一段中失误太多,就会重新开始这一段。这就需要用到**设置播放方式**,以跳转到之前的小节。当然,也要结合上之前学过的[条件](../pages/condition.md),以判断失误数是否超过某个值。([atLeastNPerfects](https://docs.qq.com/sheet/DQUJxb0puSFFOVWpz?tab=000003)可能会派上用场)
|
||||
|
||||
> 最后,做个关于关卡设计的提醒:制作**教程关卡**时,请添加`晕影`或`闪烁晕影`特效并添加`轨道涂色`,以确保`轨道`清晰可见。
|
||||
|
||||

|
||||
@@ -1,45 +1,5 @@
|
||||
# 场景与主题
|
||||
|
||||
当我们在同一房间里设置了多个轨道的时候,角色位置会自动生成在屏幕上。不同的轨道数量下默认的位置也会不同:
|
||||
|
||||
* 一根轨道在屏幕的`(9.94%, 50.00%)`处
|
||||
* 两根轨道在屏幕的`(9.94%, 60.61%)`,`(9.94%, 39.39%)`处
|
||||
* 三根轨道在屏幕的`(9.94%, 71.21%)`,`(9.94%, 50.00%)`,`(9.94%, 28.79%)`处
|
||||
* 四根轨道在屏幕的`(9.94%, 81.82%)`,`(9.94%, 60.61%)`,`(9.94%, 39.39%)`,`(9.94%, 18.18%)`处
|
||||
|
||||

|
||||
|
||||
<div class="theme-positions" id="theme-positions">
|
||||
<div class="column ccharacter"></div>
|
||||
<div class="column c1"></div>
|
||||
<div class="column c2"></div>
|
||||
<div class="column c3"></div>
|
||||
<div class="column c4"></div>
|
||||
<div class="column c5"></div>
|
||||
<div class="column ccenter"></div>
|
||||
<div class="column c6"></div>
|
||||
<div class="column c7"></div>
|
||||
<div class="column cheart"></div>
|
||||
<div class="row r1"></div>
|
||||
<div class="row r2"></div>
|
||||
<div class="row r3"></div>
|
||||
<div class="row r4"></div>
|
||||
<div class="row r5"></div>
|
||||
<div class="row r6"></div>
|
||||
<div class="row r7"></div>
|
||||
<div class="selectbox"></div>
|
||||
<div class="infobox">
|
||||
<p class="per"><span class="x"></span>, <span class="y"></span></p>
|
||||
<p class="px"><span class="x"></span>, <span class="y"></span></p>
|
||||
<p class="other"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
此处的坐标原点为屏幕左下角,轨道的参考位置是人物像素画的中心点。如果任其按默认位置排布,会显得有些缺乏设计感。
|
||||
|
||||

|
||||
|
||||
所以在设计全程静止不动的轨道位置的时候,我们应该在一开始就让他们站在合适的位置上,并且最好能契合背景画面。下面我们拿官方自带的一些场景来举例子。使用这些场景需要在紫色版块里面添加**设置主题**,再选择“花房·昼”。然后在时间轴最开始的位置设好三个人物的轨道移动。
|
||||
|
||||
这样三个角色都**站在地上**并且有一定的交错。没错,这就是`3-1`沉睡花园。
|
||||
@@ -56,4 +16,43 @@
|
||||
|
||||
甚至轨道可以大部分位置都不可见。比如制作只显示脉冲心跳部位的单发拍子,并做成纯色等。
|
||||
|
||||
> 调用自定义方法`invisibleHeart = true`可以让轨道上的心脏消失。如果不选择角色,那么就只剩下一根线了,在一些极简色块画风的关卡里效果拔群。
|
||||
> 使用轨道涂色或调用自定义方法`invisibleHeart = true`可以让轨道上的心脏消失。如果不选择角色,那么就只剩下一根线了,在一些极简色块画风的关卡里效果拔群。
|
||||
|
||||
## 背景和前景图片
|
||||
|
||||
在房间的前后关系里我们提到了背景图片和前景图片这两个概念,也就是说,除了使用编辑器内自带的一些主题之外,其实自己也是可以自定义画面的背景和前景图案的。这个功能同样十分灵活,但是如果想要完全靠自己来原创或是临摹背景图片的话,可能需要对画像素画有一些掌握。
|
||||
|
||||
选择紫色的版块,放置一个**设置背景**的事件,发现里面有两种形式,一种是纯色,这个比较好理解,唯独要注意的是**纯色的默认值是黑色而不是透明**,另一种是插入图片。
|
||||
|
||||
> 插入的图片必须是.png格式,如果你是自己画背景图,建议使用画布大小为352\*198像素。
|
||||
|
||||
颜色选项,看似意义不明,但其实也有一定的用处。如果你导入的图片只有纯白和透明两种颜色,这个功能就可以为纯白的部分染色,染成你自己设置的颜色。但是因为一次只能设置一种颜色,使用起来也有些限制。
|
||||
|
||||
缩放功能其实类似于操作系统里壁纸的填充方式,具体效果点开小箭头查看。
|
||||
|
||||
<details><summary><strong>填充方式</strong></summary>
|
||||
<img src="../images/assets-fillmode.png" alt="填充方式图例" />
|
||||
<ul>
|
||||
<li><strong>填满:</strong>将画面拉伸到横纵全部填满屏幕。要注意的是,如果你塞进去一张高清图,编辑器也会把它缩小到352\*198像素来适应画面,而且这个缩放机制是像素化的,画面会变得非常模糊。</li>
|
||||
<li><strong>拉伸:</strong>将画面等比拉伸直到左右垂直线对齐屏幕。</li>
|
||||
<li><strong>等比拉伸:</strong>将画面等比拉伸直到上下水平线对齐屏幕。</li>
|
||||
<li><strong>居中:</strong>就是按原画面大小放在正中间。</li>
|
||||
<li><strong>平铺:</strong>像铺瓷砖一样铺满屏幕。</li>
|
||||
</ul>
|
||||
</details>
|
||||
|
||||
> 如果你想做一个动图效果,需要把.gif拆解成一连串的.png图片,在选择图片时同时选择所有的图点击确定。接下来就会多出一个设置帧数的选项,来确定动图的播放速度。帧数 = \(背景图总画面数 / 一个循环占节拍数量\) \* 曲速/60。
|
||||
设置背景一样,但使用这个功能的主要目的还是为了能产生一个图片覆盖轨道和手的效果,这样在画面效果的处理上可以更加灵活。
|
||||
|
||||
## 平铺背景
|
||||
|
||||
唯独平铺选项会多冒出来一个速度设置,它可以让背景图片始终保持设置的速度移动。
|
||||
|
||||
* 在滚屏模式下,效果类似于<code>4-2</code>的天空在慢慢移动,速度和缓速则是调整背景从静止到目标速度的变化过程。
|
||||
* 在脉冲模式下,背景的移动速度变化就是周期性的,用<code>间隔</code>来调整周期。另外,如果你想设计这样的移动背景,在作画的时候也需要考虑画面左右两端和上下两端的连续,否则画面运动起来会感觉到割裂。
|
||||
|
||||
举个例子,公路,山坡,白云,蓝天的运动速度都不一样,毕竟在画面中的远近关系不一样,把他们分别画在四个背景图片里,放在四个房间,然后设置四个移动房间事件,把位置都改为`(50%, 50%)`,把大小都改为`(100%, 100%)`,设置四个背景图片,使用平铺的方式,设置不同的水平移动速度,就得到了在公路上慢慢前进的效果。
|
||||
|
||||

|
||||
|
||||
另外,使用小图片像地砖一样平铺才是更为原本的用法。
|
||||
|
||||
@@ -16,6 +16,6 @@
|
||||
|
||||
官方在 v0.18.0 时重新设计了大量关卡的双人模式版本。
|
||||
在设计双人模式关卡时,最核心的要点就是:需要让玩家分清他所控制的轨道。这同时也适用于在关卡中将某个轨道托付给 Otto 时的情况。
|
||||
在为单发拍使用护士提示时需要用两种护士音效以区分玩家,通常为 P1 使用的语音为**护士**,P2 使用的语音为**伊恩**。你也可以根据实际场景交换这两者。
|
||||
在为单发拍使用护士提示时需要用两种护士音效以区分玩家,通常为 P1 使用的语音为**护士**,P2 使用的语音为**伊恩**。你也可以根据实际场景灵活变通。
|
||||
轨道的音效使用左右声道作区分(例如左声道只播放 P1 需要操控的轨道的音效而右声道相反)也是一个不错的选择。
|
||||
当 P1、P2 交换轨道控制权时,需要使用护士语音 `Switch` 以提示即将交换轨道控制权。
|
||||
|
||||
@@ -1,72 +1,103 @@
|
||||
# 视觉干扰
|
||||
# 基础 VFX 效果
|
||||
|
||||
> 在关卡中出现对比度较高画面快速交替,如红蓝、黑白快速闪烁,必须开启癫痫警告。使用“放克”特效,必须开启癫痫警告。使用“干扰”特效较多,建议开启癫痫警告。一秒出现3次以上快速闪烁,建议开启癫痫警告。
|
||||
本节将介绍几种最常用、最容易上手的视觉特效。这些特效不需要复杂的组合,单独使用就能为你的关卡增色不少。如果你是第一次接触节奏医生的谱面制作,建议先从这里开始。
|
||||
|
||||
> 即使开启了癫痫警告,也不要设计出会伤害视力的干扰效果。
|
||||
## 震动
|
||||
|
||||
## 综述
|
||||
震动是最直觉的反馈手段——玩家按对了拍子,画面跟着"咚"一下,手感立刻就上来了。
|
||||
|
||||
视觉干扰效果算是节奏医生做谱的一大特色了。因为游戏玩法本身是可以做到纯音押的,所以在视觉上对玩家进行考验不仅可以增大难度,同时又可以有很新奇的观赏效果。在剧情模式中,视觉干扰主要集中在`1-X 东方失眠夜`,`1-XN 超·东方失眠夜`两关,其余还有关卡的小部分环节用到了视觉干扰,效果都极具震撼。
|
||||
编辑器中提供了几种震动方式,可以在紫色版块中找到:
|
||||
|
||||
需要注意的是,**视觉干扰不等于读谱不能**,更不等于塞爆。这些干扰是为重复或单一的节奏增添趣味与挑战性而添加的,虽然一定意义上增加了读谱难度,但是仍应当给玩家留有恰当的反应时间。如果节奏设计本身就有难度,还刻意阻挡玩家进行识谱,效果将会是适得其反的。
|
||||
| 震动类型 | 效果 |
|
||||
| :--- | :--- |
|
||||
| **屏幕震动** | 整个画面抖动,分为轻微、中等、剧烈三档 |
|
||||
| **自定义震动** | 自由度更高,有多种模式 |
|
||||
| **按键震屏** | 每次按拍时画面抖动一下,适合强调节拍的"打击感" |
|
||||
| **心跳震屏** | 每次脉冲时画面轻微抖动,适合营造心跳般的律动感 |
|
||||
| **重低音震动** | 大幅度色像差 + 大幅度屏幕缩放,视觉冲击力最强 |
|
||||
|
||||
另外,视觉干扰设计的主要原则依然是采音。音乐具有这样的特色,且不好转变为轨道节奏的话,就把这部分采音对应到视觉的同步变化和卡顿,完美地解决节奏设计与画面设计两个问题。
|
||||
> 震动虽然好用,但也不要每个拍子都加。在一整段密集节奏里全部堆震动,画面会晃得让人头晕。建议只在重拍或者情绪转折点使用,这样才能"震"到点上。
|
||||
|
||||
## 卡带效果
|
||||

|
||||
|
||||
如果你对剧情关卡`1-X`东方不眠夜还有印象的话,或许能回忆起节奏配合着音乐一卡一卡的效果,这就是靠**卡带效果**做到的,它可以让心跳在某一拍卡住。
|
||||
## 闪光
|
||||
|
||||

|
||||
闪光和震动类似,也是一种即时的视觉反馈。按下拍子的瞬间闪一下白光,能让玩家清晰地感受到节奏的落点。
|
||||
|
||||
这样看图似乎也不够直观,我们举几个实例来看看是怎么做到的:
|
||||
在紫色版块中可以找到两种闪光:
|
||||
|
||||

|
||||
**闪烁:** 最简单的闪光,屏幕白色一闪,分为短、中、长三种时长。适合用在副歌进入、重拍等需要强调的时刻。
|
||||
|
||||
能看到其中一个单发拍子拍下空格之后蓝条是**反复闪烁了3次**的,这就是循环的作用;而这三次闪烁之间的**时间间隔均为0.25拍**,这就是长度的作用;循环的是该小节**第2拍起头时的画面**,这就是拍子源的作用。
|
||||
**自定义闪烁:** 可以自由设置闪烁的颜色、透明度变化、持续时间和缓速模式。其中有一个"闪烁版"选项,可以控制闪烁出现在前景图之上还是背景图之上,灵活度很高。最下面的“减弱闪烁强度”则是当玩家开启“减弱闪烁强度”时使用这个设置的闪烁。
|
||||
|
||||

|
||||
> 频繁闪烁的谱面请务必加上癫痫警告!
|
||||
|
||||
这里的音乐段是一个密集的鼓点,于是就按照鼓点的节奏同步地设计了卡带效果,并且反复。这个卡带的位置刚好放置了一个轨道的旋转,进而做到了轨道卡壳转不动的效果。
|
||||
闪光通常配合节拍或者轨道一起使用效果最好。比如在副歌开始时闪一下,或者在长按拍子结束时闪一下,都能让画面和音乐的配合更加紧密。
|
||||
|
||||
这似乎也给了我们一个很好的提示:卡带效果往往都是和音乐中的配器节奏同步的,画面跟随着音乐一起卡才能卡在一个最爽的位置。密集的采音往往本身也就不适合用来做节奏,将其转化为卡带效果反而能够出奇制胜。
|
||||
## 预设 VFX
|
||||
|
||||
## 设置速度
|
||||
**设置速度**事件修改的是画面的播放速度,但注意,音乐速度并不会跟着改变,改变的只有设置主题里的动画速度,平铺背景的移动速度,所有带有“动画时长”设置的事件的变化速度等。
|
||||
预设特效是编辑器内置的一大类视觉效果,种类非常丰富,从轻微的画面调整到强烈的精神污染应有尽有。你可以在紫色版块的**预设特效**中找到它们。
|
||||
|
||||
其中带有“动画时长”设置的事件(例如轨道移动,浮动文字)是要特别注意的,例如你填写了动画时长为`2拍`,同时又设置速度为`2倍`,那么该事件就在1拍的时间里完成了。
|
||||
这里列举一些初学者最常用的预设特效:
|
||||
|
||||
设置速度事件可以填写小数,并且最低可以修改为`0`。当速度为0时画面就会静止,但很邪门的是轨道上的人物和节奏脉冲是对此免疫的,要注意考虑好是否隐藏这些轨道以免造成违和感。
|
||||
### 摄像头类
|
||||
|
||||

|
||||
| 特效 | 效果 |
|
||||
| :--- | :--- |
|
||||
| **屏幕分隔** | 把画面分成若干个相同的部分,可以填写小数 |
|
||||
| **屏幕滚动** | 画面向指定方向循环滚动 |
|
||||
| **过场模式** | 屏幕上下出现黑条,像游戏过场动画的感觉 |
|
||||
| **按键低重音** | 每次按拍后画面产生震动和色像差 |
|
||||
| **鱼眼** | 中间比边缘更大的鱼眼镜头效果,强度可以是负数 |
|
||||
|
||||
## 预设特效的多重叠合
|
||||
### 画风突变类
|
||||
|
||||
很多预设特效都自带一点画面干扰的倾向,而将这些效果叠加就能加剧干扰效果,如果再叠加上一节所述的镜厅效果则会更加一发不可收拾。堆预设特效可以玩玩,但也要适度。
|
||||
| 特效 | 效果 |
|
||||
| :--- | :--- |
|
||||
| **亮度** | 改变画面亮度,小于等于0相当于黑屏 |
|
||||
| **对比度** | 改变色彩对比度,负数相当于反色 |
|
||||
| **饱和度** | 改变色彩饱和度,负数相当于反色 |
|
||||
| **灰度** | 画面变成黑白灰的 |
|
||||
| **怀旧** | 画面发黄,复古感 |
|
||||
| **模糊** | 让画面变得模糊 |
|
||||
| **像素化** | 画面变成像素格 |
|
||||
| **色调偏移** | 改变画面色调,每隔100%是一个色调循环 |
|
||||
| **色像差** | 类似红蓝3D眼镜不戴时看到的效果 |
|
||||
| **晕影** | 边缘变暗的效果 |
|
||||
|
||||
除镜厅外,放克特效也是要谨慎使用的,过大的饱和度会让眼部急剧不适,往往可以放在整个场景的最底层空区域进行一个小面积适度的铺设。
|
||||
### 添加物类
|
||||
|
||||
下面举几个例子:
|
||||
| 特效 | 效果 |
|
||||
| :--- | :--- |
|
||||
| **落雨** | 屏幕上出现下雨效果 |
|
||||
| **飘雪** | 屏幕上方落下雪花 |
|
||||
| **落花** | 屏幕上方落下花瓣 |
|
||||
| **气球** | 屏幕下方飘出气球 |
|
||||
| **纸屑** | 屏幕上方落下各种颜色的纸屑 |
|
||||
|
||||
**竖直滚屏+VHS+电影噪点+高光**
|
||||
> 预设特效可以叠加使用,但也要适度。堆太多特效不仅会让画面变得混乱,还可能造成性能问题。初学者建议每次只叠加2-3个特效,观察效果后再决定是否继续添加。
|
||||
|
||||
带来信号干扰、丢失的感觉
|
||||
完整的预设特效列表可以参考[预设特效附录](../pages/appendix_vfxs.md)。
|
||||
|
||||
**顶部镜厅+摄像头/房间动画**
|
||||
## 反色
|
||||
|
||||
旋转,跳跃,残影,你画面拉出了完美的拖尾
|
||||
反色就是把画面上所有颜色变成它的互补色——黑变白、白变黑、红变青、蓝变黄。这是一个简单但效果非常明显的特效。
|
||||
|
||||
**屏幕翻转+颜色反转+滚屏**
|
||||
实现反色有几种方式:
|
||||
|
||||
画面你别乱跑
|
||||
1. **对比度或饱和度设为负数:** 在预设特效中,将对比度或饱和度的值设为负数,就能达到类似反色的效果。
|
||||
2. **使用颜色反转事件:** 直接在紫色版块中使用颜色反转事件,一步到位。
|
||||
|
||||
**短暂的噪点/干扰**
|
||||
反色通常用于表达情绪突变、场景切换或者节奏上的高潮段落。例如在一段平静的音乐之后突然反色,能给玩家带来强烈的视觉冲击。
|
||||
|
||||
默数拍子开启
|
||||
> 反色不要用得太频繁。快速交替的反色会造成高频率闪烁,非常伤眼,属于视觉干扰的范畴。如果确实需要频繁反色,请参考[视觉干扰](../pages/vfxpro.md)中的注意事项。
|
||||
|
||||
**放克+落雨+灰度+慢游戏速度**
|
||||
## 镜像
|
||||
|
||||
听话,别把灰度去掉
|
||||
镜像效果可以让画面左右对称或者上下对称,产生一种"照镜子"的感觉。这个效果在编辑器中可以通过**屏幕翻转**事件来实现。
|
||||
|
||||
**25%白色前景闪烁+暴风雪+雪花+VHS+关闭竖直滚屏+电影噪点+JPEG失真+落雨+快游戏速度**
|
||||
镜像最典型的用法是配合场景设计。比如在一个对称的舞台背景中使用镜像,可以让画面看起来更加整齐华丽。又或者在某些特定的节拍点上突然镜像再恢复,能产生一种"时空错乱"的视觉效果。
|
||||
|
||||
最后的绝望(《冰与火之舞》 “XH-X 最后的希望”类似效果)
|
||||
镜像也可以和移动房间配合使用。把房间缩小并镜像,就可以在屏幕边缘做出类似"画中画"的效果,丰富画面的层次感。
|
||||
|
||||
> 镜像本身是一个比较克制的特效,单独使用时不会太伤眼。但如果和其他特效(尤其是镜厅、放克等)叠加,效果可能会变得非常夸张,使用时请注意测试。
|
||||
@@ -0,0 +1,49 @@
|
||||
# 视觉干扰
|
||||
|
||||
> 在关卡中出现对比度较高画面快速交替,如红蓝、黑白快速闪烁,必须开启癫痫警告。
|
||||
> 使用“放克”特效,必须开启癫痫警告。
|
||||
> 使用“干扰”特效较多,建议开启癫痫警告。
|
||||
> 一秒出现3次以上快速闪烁,建议开启癫痫警告。
|
||||
|
||||
> 即使开启了癫痫警告,也不要设计出会伤害视力的干扰效果。
|
||||
|
||||
## 综述
|
||||
|
||||
视觉干扰效果算是节奏医生做谱的一大特色了。因为游戏玩法本身是可以做到纯音押的,所以在视觉上对玩家进行考验不仅可以增大难度,同时又可以有很新奇的观赏效果。在剧情模式中,视觉干扰主要集中在`1-X 东方失眠夜`,`1-XN 超·东方失眠夜`两关,其余还有关卡的小部分环节用到了视觉干扰,效果都极具震撼。
|
||||
|
||||
需要注意的是,**视觉干扰不等于读谱不能**,更不等于塞爆。这些干扰是为重复或单一的节奏增添趣味与挑战性而添加的,虽然一定意义上增加了读谱难度,但是仍应当给玩家留有恰当的反应时间。如果节奏设计本身就有难度,还刻意阻挡玩家进行识谱,效果将会是适得其反的。
|
||||
|
||||
另外,视觉干扰设计的主要原则依然是采音。音乐具有这样的特色,且不好转变为轨道节奏的话,就把这部分采音对应到视觉的同步变化和卡顿,完美地解决节奏设计与画面设计两个问题。
|
||||
|
||||
## 卡带效果
|
||||
|
||||
如果你对剧情关卡`1-X`东方不眠夜还有印象的话,或许能回忆起节奏配合着音乐一卡一卡的效果,这就是靠**卡带效果**做到的,它可以让心跳在某一拍卡住。
|
||||
|
||||

|
||||
|
||||
这样看图似乎也不够直观,我们举几个实例来看看是怎么做到的:
|
||||
|
||||

|
||||
|
||||
能看到其中一个单发拍子拍下空格之后蓝条是**反复闪烁了3次**的,这就是循环的作用;而这三次闪烁之间的**时间间隔均为0.25拍**,这就是长度的作用;循环的是该小节**第2拍起头时的画面**,这就是拍子源的作用。
|
||||
|
||||

|
||||
|
||||
这里的音乐段是一个密集的鼓点,于是就按照鼓点的节奏同步地设计了卡带效果,并且反复。这个卡带的位置刚好放置了一个轨道的旋转,进而做到了轨道卡壳转不动的效果。
|
||||
|
||||
这似乎也给了我们一个很好的提示:卡带效果往往都是和音乐中的配器节奏同步的,画面跟随着音乐一起卡才能卡在一个最爽的位置。密集的采音往往本身也就不适合用来做节奏,将其转化为卡带效果反而能够出奇制胜。
|
||||
|
||||
## 设置速度
|
||||
**设置速度**事件修改的是画面的播放速度,但注意,音乐速度并不会跟着改变,改变的只有设置主题里的动画速度,平铺背景的移动速度,所有带有“动画时长”设置的事件的变化速度等。
|
||||
|
||||
其中带有“动画时长”设置的事件(例如轨道移动,浮动文字)是要特别注意的,例如你填写了动画时长为`2拍`,同时又设置速度为`2倍`,那么该事件就在1拍的时间里完成了。
|
||||
|
||||
设置速度事件可以填写小数,并且最低可以修改为`0`。当速度为0时画面就会静止,但很邪门的是轨道上的人物和节奏脉冲是对此免疫的,要注意考虑好是否隐藏这些轨道以免造成违和感。
|
||||
|
||||

|
||||
|
||||
## 预设特效的多重叠合
|
||||
|
||||
很多预设特效都自带一点画面干扰的倾向,而将这些效果叠加就能加剧干扰效果,如果再叠加上一节所述的镜厅效果则会更加一发不可收拾。堆预设特效可以玩玩,但也要适度。
|
||||
|
||||
除镜厅外,放克特效也是要谨慎使用的,过大的饱和度会让眼部急剧不适,往往可以放在整个场景的最底层空区域进行一个小面积适度的铺设。
|
||||
@@ -0,0 +1,253 @@
|
||||
{ "frames": [
|
||||
{
|
||||
"filename": "0.ase",
|
||||
"frame": { "x": 0, "y": 0, "w": 327, "h": 160 },
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"spriteSourceSize": { "x": 0, "y": 0, "w": 327, "h": 160 },
|
||||
"sourceSize": { "w": 327, "h": 160 },
|
||||
"duration": 100
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.aseprite.org/",
|
||||
"version": "1.3.16-beta3-x64",
|
||||
"image": "assets.png",
|
||||
"format": "RGBA8888",
|
||||
"size": { "w": 327, "h": 160 },
|
||||
"scale": "1",
|
||||
"slices": [
|
||||
{ "name": "event_SpinningRows", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 246, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetMainWindow", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 246, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_RenameWindow", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 246, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_DesktopColor_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 249, "y": 20, "w": 8, "h": 5 }, "pivot": {"x": -3, "y": -6 } }] },
|
||||
{ "name": "event_DesktopColor", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 232, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_HideWindow", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 232, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderWindows_3", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 162, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderWindows_2", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 162, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderWindows_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 162, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderWindows_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 162, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderWindows", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 162, "y": 42, "w": 14, "h": 56 } }] },
|
||||
{ "name": "event_ReorderRooms_3", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 148, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderRooms_2", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 148, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderRooms_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 148, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderRooms_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 148, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_CustomFlash_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 190, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_MacroEvent", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 78, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ForwardEvent", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 64, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ForwardDecorationEvent", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 106, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ForwardRowEvent", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 92, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetWindowContent", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 78, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_WindowResize", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 64, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_Tile", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 120, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_Blend", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderSprite", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 106, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ShakeScreenCustom", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 232, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderRow", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 92, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_NarrateRowInfo", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 176, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReadNarration", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 190, "y": 0, "w": 14, "h": 14 } }] },
|
||||
{ "name": "tab_icon_sounds", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 35, "y": 0, "w": 15, "h": 13 } }] },
|
||||
{ "name": "tab_color_sounds", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 22, "y": 39, "w": 2, "h": 13 } }] },
|
||||
{ "name": "content_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 80, "y": 106, "w": 5, "h": 5 }, "center": {"x": 2, "y": 2, "w": 1, "h": 1 } }] },
|
||||
{ "name": "tab_icon_rows", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 0, "y": 13, "w": 15, "h": 13 } }] },
|
||||
{ "name": "tab_icon_actions", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 0, "y": 26, "w": 15, "h": 13 } }] },
|
||||
{ "name": "tab_icon_rooms", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 0, "y": 39, "w": 15, "h": 13 } }] },
|
||||
{ "name": "tab_icon_decorations", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 0, "y": 52, "w": 15, "h": 13 } }] },
|
||||
{ "name": "tab_icon_windows", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 0, "y": 65, "w": 15, "h": 13 } }] },
|
||||
{ "name": "tab_color_rows", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 24, "y": 39, "w": 2, "h": 13 } }] },
|
||||
{ "name": "tab_color_actions", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 26, "y": 39, "w": 2, "h": 13 } }] },
|
||||
{ "name": "tab_color_rooms", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 28, "y": 39, "w": 2, "h": 13 } }] },
|
||||
{ "name": "tab_color_decorations", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 30, "y": 39, "w": 2, "h": 13 } }] },
|
||||
{ "name": "tab_color_windows", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 32, "y": 39, "w": 2, "h": 13 } }] },
|
||||
{ "name": "tab_color_unknown", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 34, "y": 39, "w": 2, "h": 13 } }] },
|
||||
{ "name": "tab_icon_unknown", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 0, "y": 78, "w": 15, "h": 13 } }] },
|
||||
{ "name": "content_2", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 85, "y": 105, "w": 7, "h": 7 }, "center": {"x": 3, "y": 3, "w": 1, "h": 1 } }] },
|
||||
{ "name": "event_Comment", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ReorderRooms", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 148, "y": 42, "w": 14, "h": 56 } }] },
|
||||
{ "name": "event_SetCrotchetsPerBar", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 78, "y": 0, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_PlaySong", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 0, "w": 28, "h": 14 } }] },
|
||||
{ "name": "event_PlaySound", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 190, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetBeatsPerMinute", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 218, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetClapSounds", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 176, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetHeartExplodeVolume", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 134, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetHeartExplodeInterval", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 134, "y": 0, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetGameSound", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 148, "y": 0, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetBeatSound", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 162, "y": 0, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetCountingSound", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 176, "y": 0, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetOneshotWave", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 78, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_AddFreeTimeBeat", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 225, "y": 0, "w": 7, "h": 14 } }] },
|
||||
{ "name": "event_PulseFreeTimeBeat", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 232, "y": 0, "w": 7, "h": 12 } }] },
|
||||
{ "name": "event_SetTheme", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetVFXPreset", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 190, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetForeground", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 134, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetBackgroundColor", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 134, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetSpeed", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 204, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_Flash", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 190, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_CustomFlash", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 204, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_NewWindowDance", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_MoveCamera", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 176, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_PulseCamera", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 120, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_TextExplosion", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 134, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ShowDialogue", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 148, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ShowStatusSign", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 162, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_AdvanceText", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 218, "y": 0, "w": 7, "h": 14 } }] },
|
||||
{ "name": "event_TintRows", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 92, "y": 0, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_Tint", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 106, "y": 0, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_TagAction", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 162, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_Stutter", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 78, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ShowHands", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 78, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ShakeScreen", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 204, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetVisible", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 106, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetRoomPerspective", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 64, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetRoomContentMode", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 120, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetPlayStyle", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 148, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetHandOwner", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 134, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_PaintHands", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 120, "y": 1, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_PlayExpression", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 106, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_MoveRoom", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_MaskRoom", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 78, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_MoveRow", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 204, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_InvertColors", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 218, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_HideRow", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 92, "y": 42, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_FlipScreen_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 218, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_FinishLevel", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 190, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ChangePlayersRows", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 176, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_BassDrop", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 190, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_CallCustomMethod", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 176, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_PlayAnimation", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 92, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_Move", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 176, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_FadeRoom", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 64, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_Unknown", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 64, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "themes", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 15, "y": 39, "w": 7, "h": 13 } }] },
|
||||
{ "name": "event_beat_pulse", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 98, "w": 3, "h": 14 }, "pivot": {"x": 1, "y": 0 } }] },
|
||||
{ "name": "event_beat_hit", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 53, "y": 98, "w": 5, "h": 14 }, "pivot": {"x": 2, "y": 0 } }] },
|
||||
{ "name": "event_beat_x", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 84, "y": 98, "w": 9, "h": 7 } }] },
|
||||
{ "name": "char_0021", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 54, "y": 112, "w": 2, "h": 8 } }] },
|
||||
{ "name": "char_0022", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 56, "y": 112, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_0023", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 60, "y": 112, "w": 6, "h": 8 } }] },
|
||||
{ "name": "char_0024", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 66, "y": 112, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0025", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 71, "y": 112, "w": 6, "h": 8 } }] },
|
||||
{ "name": "char_0026", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 77, "y": 112, "w": 6, "h": 8 } }] },
|
||||
{ "name": "char_0027", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 83, "y": 112, "w": 2, "h": 8 } }] },
|
||||
{ "name": "char_0028", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 85, "y": 112, "w": 3, "h": 8 } }] },
|
||||
{ "name": "char_0029", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 88, "y": 112, "w": 3, "h": 8 } }] },
|
||||
{ "name": "char_002a", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 91, "y": 112, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_002b", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 95, "y": 112, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_002c", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 99, "y": 112, "w": 3, "h": 8 } }] },
|
||||
{ "name": "char_002d", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 102, "y": 112, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_002e", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 106, "y": 112, "w": 2, "h": 8 } }] },
|
||||
{ "name": "char_002f", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 108, "y": 112, "w": 6, "h": 8 } }] },
|
||||
{ "name": "char_0030", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 120, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0031", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 55, "y": 120, "w": 3, "h": 8 } }] },
|
||||
{ "name": "char_0032", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 58, "y": 120, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0033", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 63, "y": 120, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0034", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 68, "y": 120, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0035", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 73, "y": 120, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0036", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 78, "y": 120, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0037", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 83, "y": 120, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0038", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 88, "y": 120, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0039", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 93, "y": 120, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_003a", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 98, "y": 120, "w": 2, "h": 8 } }] },
|
||||
{ "name": "char_003b", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 100, "y": 120, "w": 2, "h": 8 } }] },
|
||||
{ "name": "char_003c", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 102, "y": 120, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_003d", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 106, "y": 120, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_003e", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 110, "y": 120, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_003f", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 114, "y": 120, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0040", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 128, "w": 6, "h": 8 } }] },
|
||||
{ "name": "char_0041", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 56, "y": 128, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0042", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 61, "y": 128, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0043", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 66, "y": 128, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_0044", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 70, "y": 128, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0045", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 75, "y": 128, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_0046", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 79, "y": 128, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_0047", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 83, "y": 128, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0048", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 88, "y": 128, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0049", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 93, "y": 128, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_004a", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 97, "y": 128, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_004b", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 102, "y": 128, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_004c", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 107, "y": 128, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_004d", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 111, "y": 128, "w": 6, "h": 8 } }] },
|
||||
{ "name": "char_004e", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 117, "y": 128, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_004f", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 122, "y": 128, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0050", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 136, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0051", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 55, "y": 136, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0052", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 60, "y": 136, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0053", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 65, "y": 136, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0054", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 70, "y": 136, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_0055", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 74, "y": 136, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0056", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 79, "y": 136, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0057", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 84, "y": 136, "w": 6, "h": 8 } }] },
|
||||
{ "name": "char_0058", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 90, "y": 136, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0059", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 95, "y": 136, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_005a", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 100, "y": 136, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_005b", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 104, "y": 136, "w": 3, "h": 8 } }] },
|
||||
{ "name": "char_005c", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 107, "y": 136, "w": 6, "h": 8 } }] },
|
||||
{ "name": "char_005d", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 113, "y": 136, "w": 3, "h": 8 } }] },
|
||||
{ "name": "char_005e", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 116, "y": 136, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_005f", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 120, "y": 136, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0060", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 144, "w": 3, "h": 8 } }] },
|
||||
{ "name": "char_0061", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 53, "y": 144, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0062", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 58, "y": 144, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0063", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 63, "y": 144, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_0064", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 67, "y": 144, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0065", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 72, "y": 144, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0066", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 77, "y": 144, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_0067", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 81, "y": 144, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0068", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 86, "y": 144, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0069", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 91, "y": 144, "w": 2, "h": 8 } }] },
|
||||
{ "name": "char_006a", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 93, "y": 144, "w": 3, "h": 8 } }] },
|
||||
{ "name": "char_006b", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 96, "y": 144, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_006c", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 101, "y": 144, "w": 2, "h": 8 } }] },
|
||||
{ "name": "char_006d", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 103, "y": 144, "w": 6, "h": 8 } }] },
|
||||
{ "name": "char_006e", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 109, "y": 144, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_006f", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 114, "y": 144, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0070", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 152, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0071", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 55, "y": 152, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0072", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 60, "y": 152, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_0073", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 64, "y": 152, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0074", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 69, "y": 152, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_0075", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 73, "y": 152, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0076", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 78, "y": 152, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0077", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 83, "y": 152, "w": 6, "h": 8 } }] },
|
||||
{ "name": "char_0078", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 89, "y": 152, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_0079", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 93, "y": 152, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_007a", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 98, "y": 152, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_007b", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 103, "y": 152, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_007c", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 107, "y": 152, "w": 2, "h": 8 } }] },
|
||||
{ "name": "char_007d", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 109, "y": 152, "w": 4, "h": 8 } }] },
|
||||
{ "name": "char_007e", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 113, "y": 152, "w": 5, "h": 8 } }] },
|
||||
{ "name": "char_0020", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 112, "w": 4, "h": 8 } }] },
|
||||
{ "name": "event_tag", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 239, "y": 0, "w": 6, "h": 6 } }] },
|
||||
{ "name": "event_tag_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 239, "y": 6, "w": 6, "h": 6 } }] },
|
||||
{ "name": "event_beat_loop", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 75, "y": 98, "w": 9, "h": 8 }, "pivot": {"x": 5, "y": 4 } }] },
|
||||
{ "name": "event_beat_cross", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 92, "y": 108, "w": 3, "h": 3 }, "pivot": {"x": 1, "y": -6 } }] },
|
||||
{ "name": "event_beat_hit_burn", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 63, "y": 98, "w": 7, "h": 14 }, "pivot": {"x": 3, "y": 0 } }] },
|
||||
{ "name": "event_beat_synco", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 93, "y": 98, "w": 9, "h": 7 } }] },
|
||||
{ "name": "event_beat_hit_freeze", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 58, "y": 98, "w": 5, "h": 14 }, "pivot": {"x": 2, "y": 0 } }] },
|
||||
{ "name": "event_beat_skip", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 70, "y": 98, "w": 5, "h": 14 } }] },
|
||||
{ "name": "event_beat_area", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 95, "y": 105, "w": 3, "h": 4 }, "center": {"x": 0, "y": 1, "w": 2, "h": 2 } }] },
|
||||
{ "name": "event_beat_line", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 102, "y": 98, "w": 9, "h": 7 } }] },
|
||||
{ "name": "event_CustomFlash_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 204, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_FlipScreen_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 232, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_FlipScreen", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 218, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_FlipScreen_2", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 232, "y": 70, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_FloatingText_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 204, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_FloatingText_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 218, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_PaintHands_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 120, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_PaintHands_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 120, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetBackgroundColor_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 134, "y": 56, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetBackgroundColor_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 137, "y": 60, "w": 8, "h": 6 }, "pivot": {"x": -3, "y": -4 } }] },
|
||||
{ "name": "event_SetForeground_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 137, "y": 74, "w": 7, "h": 5 }, "pivot": {"x": -3, "y": -4 } }] },
|
||||
{ "name": "event_Tint_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 106, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_Tint_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 106, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_TintRows_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 92, "y": 14, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_TintRows_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 92, "y": 28, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_ShowRooms_1", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 162, "y": 98, "w": 28, "h": 28 } }] },
|
||||
{ "name": "event_ShowRooms_0", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 134, "y": 98, "w": 28, "h": 28 } }] },
|
||||
{ "name": "event_ChangeCharacter", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 120, "y": 84, "w": 14, "h": 14 } }] },
|
||||
{ "name": "event_SetRowXs", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 50, "y": 14, "w": 28, "h": 14 } }] },
|
||||
{ "name": "event_outline", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 75, "y": 106, "w": 5, "h": 5 }, "center": {"x": 2, "y": 2, "w": 1, "h": 1 } }] },
|
||||
{ "name": "event_back", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 92, "y": 105, "w": 3, "h": 3 }, "center": {"x": 1, "y": 1, "w": 1, "h": 1 } }] }
|
||||
]
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 6.5 KiB |
@@ -101,7 +101,7 @@ metadata:
|
||||
|
||||
- 对于 落雨/JPEG失真/马赛克/海底波浪/电影噪点/暴风雪/素描/色像差/模糊/径向模糊/色调偏移:强度,缓速时长,缓速
|
||||
|
||||
- 对于 自定义屏幕块/自定义滚屏:x/y
|
||||
- 对于 自定义屏幕分隔/屏幕滚动:x/y
|
||||
|
||||
- 对于 高光:阈值,强度,颜色,缓速时长,缓速
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
|
||||
|
||||
const customMethods = [
|
||||
{ type: 'mod',}
|
||||
]
|
||||
|
||||
const editDistance = (a, b) => {
|
||||
if (a.length === 0) return b.length;
|
||||
if (b.length === 0) return a.length;
|
||||
const matrix = [];
|
||||
for (let i = 0; i <= b.length; i++) {
|
||||
matrix[i] = [i];
|
||||
}
|
||||
for (let j = 0; j <= a.length; j++) {
|
||||
matrix[0][j] = j;
|
||||
}
|
||||
for (let i = 1; i <= b.length; i++) {
|
||||
for (let j = 1; j <= a.length; j++) {
|
||||
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
||||
matrix[i][j] = matrix[i - 1][j - 1];
|
||||
} else {
|
||||
matrix[i][j] = Math.min(
|
||||
matrix[i - 1][j - 1] + 1,
|
||||
Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
return matrix[b.length][a.length];
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
class CustomMethods{
|
||||
type: "mod"|"surgery"|"comment"|"custom_method";
|
||||
}
|
||||
|
||||
function editDistance(a: String, b: String): number {
|
||||
if (a.length === 0) return b.length;
|
||||
if (b.length === 0) return a.length;
|
||||
const matrix: number[][] = [];
|
||||
for (let i = 0; i <= b.length; i++) {
|
||||
matrix[i] = [i];
|
||||
}
|
||||
for (let j = 0; j <= a.length; j++) {
|
||||
matrix[0][j] = j;
|
||||
}
|
||||
for (let i = 1; i <= b.length; i++) {
|
||||
for (let j = 1; j <= a.length; j++) {
|
||||
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
||||
matrix[i][j] = matrix[i - 1][j - 1];
|
||||
} else {
|
||||
matrix[i][j] = Math.min(
|
||||
matrix[i - 1][j - 1] + 1,
|
||||
Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
return matrix[b.length][a.length];
|
||||
}
|
||||
|
||||
|
||||
|
||||
export { editDistance };
|
||||
@@ -0,0 +1,79 @@
|
||||
import { createElementEvent } from "./rdtkview.js";
|
||||
export function render(data, width, height, scale = 2.0) {
|
||||
const canvas = document.createElement("div");
|
||||
let objs = [];
|
||||
try {
|
||||
objs = JSON.parse(`[${data}]`);
|
||||
canvas.innerHTML = "";
|
||||
} catch (e) {
|
||||
canvas.innerHTML =
|
||||
`<div style="color: red; font-weight: bold;">JSON解析错误:${e.message}</div>`;
|
||||
return canvas;
|
||||
}
|
||||
const eventStyle = { "scale": scale, "showDuration": false };
|
||||
const elems = [];
|
||||
for (let obj of objs) {
|
||||
const style = { ...eventStyle, enabled: obj.active ?? true };
|
||||
const elem = createElementEvent(obj, style);
|
||||
if (!elem) continue;
|
||||
elem.eventStyle = style;
|
||||
elem.style.position = "absolute";
|
||||
elem.style.left = `${
|
||||
((((obj.bar ?? 1) - 1) * 8) + (obj.beat ?? 1) - 1) * 14 *
|
||||
scale
|
||||
}px`;
|
||||
elem.style.top = `${(obj.y ?? obj.row ?? 0) * 14 * scale}px`;
|
||||
elem.addEventListener("mousedown", (event) => {
|
||||
const eStyle = elem.eventStyle;
|
||||
eStyle.active = true;
|
||||
elem.onStateChange(eStyle);
|
||||
});
|
||||
elem.addEventListener("mouseover", (event) => {
|
||||
const eStyle = elem.eventStyle;
|
||||
eStyle.hover = true;
|
||||
elem.onStateChange(eStyle);
|
||||
});
|
||||
elem.addEventListener("mouseout", (event) => {
|
||||
const eStyle = elem.eventStyle;
|
||||
eStyle.hover = false;
|
||||
eStyle.active = false;
|
||||
elem.onStateChange(eStyle);
|
||||
});
|
||||
elem.addEventListener("mouseup", (event) => {
|
||||
const eStyle = elem.eventStyle;
|
||||
eStyle.active = false;
|
||||
elem.onStateChange(eStyle);
|
||||
});
|
||||
elems.push(elem);
|
||||
}
|
||||
canvas.style.position = "relative";
|
||||
canvas.style.width = `${width * 14 * scale}px`;
|
||||
canvas.style.height = `${height * 14 * scale}px`;
|
||||
elems.forEach((elem) => {
|
||||
canvas.appendChild(elem);
|
||||
});
|
||||
return canvas;
|
||||
}
|
||||
|
||||
window.$docsify.plugins = [].concat(window.$docsify.plugins, (hook) => {
|
||||
hook.doneEach(() => {
|
||||
const pres = document.querySelectorAll("pre");
|
||||
pres.forEach((codeBlock) => {
|
||||
const lang = codeBlock.getAttribute("data-lang") || "";
|
||||
if (lang.startsWith("rdtkview")) {
|
||||
const code = codeBlock.querySelector("code").innerText || "";
|
||||
const args = lang.slice(8).trim().split(" ");
|
||||
const width = parseInt(args[0]) || 8;
|
||||
const height = parseInt(args[1]) || 4;
|
||||
const scale = parseFloat(args[2]) || 2.0;
|
||||
const result = render(code, width, height, scale);
|
||||
const parent = document.createElement("div");
|
||||
parent.style.width = 100 + "%";
|
||||
parent.style.display = "flex";
|
||||
parent.style.justifyContent = "center";
|
||||
parent.appendChild(result);
|
||||
codeBlock.replaceWith(parent);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||