From 8b4877724e1b4ef0848b5a007922e51699dd214e Mon Sep 17 00:00:00 2001 From: OLDREDSTONE Date: Wed, 25 Mar 2026 15:25:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E9=87=8F=E5=90=88=E5=B9=B6=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/appendix_events.md | 4 +- pages/changelog.md | 13 ++++++ pages/credits.md | 1 + pages/importandexport.md | 4 +- pages/moverow.md | 2 +- pages/vfxpro.md | 5 ++- script/special.js | 85 ---------------------------------------- 7 files changed, 23 insertions(+), 91 deletions(-) diff --git a/pages/appendix_events.md b/pages/appendix_events.md index ac2bc23..50a979d 100644 --- a/pages/appendix_events.md +++ b/pages/appendix_events.md @@ -47,7 +47,7 @@ | **轨道特效类** | | | | | 隐藏轨道 | `X` | [轨道移动](../pages/moverow.md#轨道的显示与隐藏) | 改变轨道的显示和隐藏状态 | | 移动轨道 | `O` | [轨道移动](../pages/moverow.md#轨道的移动) | 让轨道在画面中移动,缩放,旋转等 | -| 重排序:行 | `Shift+O` | | 将轨道移动到不同房间,或是重新对轨道进行排序 | +| 轨道重排序~~重排序:行~~ | `Shift+O` | | 将轨道移动到不同房间,或是重新对轨道进行排序 | | 播放表情 | `J` | [自制角色与精灵资源](../pages/spritesheet.md#播放表情) | 改变轨道中角色的表情 | | 改变角色 | `Shift+J` | [轨道视效](../pages/rowfx.md#轨道涂色) | 改变轨道的角色 | | 轨道涂色 | `R` | [轨道视效](../pages/rowfx.md#轨道涂色) | 设置轨道的边框、涂色、透明度 | @@ -99,7 +99,7 @@ | 绘制精灵图 | `R` | [使用精灵](../pages/decoration.md#绘制精灵图) | 设置精灵的边框、涂色、透明度 | | 播放表情 | `J` | [使用精灵](../pages/decoration.md#播放表情) | 播放精灵的表情 | | 显示/隐藏 | `X` | [使用精灵](../pages/decoration.md#显示/隐藏) | 显示或隐藏精灵 | -| 重排序:精灵图 | `Shift+O` | | 将精灵移动到不同房间,或是重新对精灵进行排序 | +| 精灵重排序~~重排序:行~~ | `Shift+O` | | 将精灵移动到不同房间,或是重新对精灵进行排序 | | 平铺精灵图 | `I` | [使用精灵](../pages/decoration.md#平铺精灵图) | 显示或隐藏精灵 | | 混合精灵图 | `B` | | 设置精灵的颜色混合模式 | | 注释 | `M` | [标签](../pages/tag.md#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 | diff --git a/pages/changelog.md b/pages/changelog.md index 891ba22..43e73d7 100644 --- a/pages/changelog.md +++ b/pages/changelog.md @@ -1,5 +1,18 @@ # 更新信息 +#### 2026-03-25 +- 更新事件列表 +- 更新预设特效列表 +- 修正格式错误 +- 更改“设置窗口数量”译名为“设置窗口内容” +- 补充 WindowDance 页内容 +- 更新轨道涂色属性页图片 +- 更新轨道重排序事件 +- 更新旋转轨道事件的详细内容 +- 更新默认轨道的各部分位置分布数值 +- 为改变轨道事件描述添加图片 +- 更新制作人员表 + #### 2026-03-01 - **变量**一节被替换为[表达式](../pages/expression.md)。 - 为各种标题添加了容易辨识和定位的背景渐变条。 diff --git a/pages/credits.md b/pages/credits.md index 2226ab3..260c5d2 100644 --- a/pages/credits.md +++ b/pages/credits.md @@ -15,6 +15,7 @@ - [正宗的小绿君](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) diff --git a/pages/importandexport.md b/pages/importandexport.md index 555812f..f920229 100644 --- a/pages/importandexport.md +++ b/pages/importandexport.md @@ -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之后还需要调整偏移。我们看一下下面波形图案,点击`‐`和`+`两个按钮进行缩小和放大。 diff --git a/pages/moverow.md b/pages/moverow.md index 87ca743..f00ba97 100644 --- a/pages/moverow.md +++ b/pages/moverow.md @@ -166,7 +166,7 @@ 将`轨道`从主轨道上**分割**出来,并旋转到`角度`度。 -## 重排序:行 +## 轨道重排序~~重排序:行~~ 将轨道转移到其他房间,或者改变轨道的层级 diff --git a/pages/vfxpro.md b/pages/vfxpro.md index 5bd33b8..4312022 100644 --- a/pages/vfxpro.md +++ b/pages/vfxpro.md @@ -1,6 +1,9 @@ # 视觉干扰 -> 在关卡中出现对比度较高画面快速交替,如红蓝、黑白快速闪烁,必须开启癫痫警告。使用“放克”特效,必须开启癫痫警告。使用“干扰”特效较多,建议开启癫痫警告。一秒出现3次以上快速闪烁,建议开启癫痫警告。 +> 在关卡中出现对比度较高画面快速交替,如红蓝、黑白快速闪烁,必须开启癫痫警告。 +> 使用“放克”特效,必须开启癫痫警告。 +> 使用“干扰”特效较多,建议开启癫痫警告。 +> 一秒出现3次以上快速闪烁,建议开启癫痫警告。 > 即使开启了癫痫警告,也不要设计出会伤害视力的干扰效果。 diff --git a/script/special.js b/script/special.js index 6acea26..a3f0a7d 100644 --- a/script/special.js +++ b/script/special.js @@ -236,91 +236,6 @@ function rdview() { textarea.addEventListener("input", initCanvas); } -function rdview2() { - let rdview = document.getElementsByClassName("rdview2")[0]; - if (!rdview) return; - let rdcanvas = rdview.querySelector(".canvas"); - let textarea = rdview.querySelector("textarea.area"); - let number = rdview.querySelector(".number"); - const textareaStyles = window.getComputedStyle(textarea); - [ - "fontFamily", - "fontSize", - "fontWeight", - "letterSpacing", - "lineHeight", - "padding", - ].forEach((property) => { - number.style[property] = textareaStyles[property]; - }); - const canvas = document.createElement("canvas"); - const context = canvas.getContext("2d"); - const font = `${textareaStyles.fontSize} ${textareaStyles.fontFamily}`; - context.font = font; - function calcStringLines(sentence, width) { - if (!width) return 0; - const words = sentence.split(""); - let lineCount = 0; - - let currentLine = ""; - for (let i = 0; i < words.length; i++) { - const wordWidth = context.measureText(words[i]).width; - const lineWidth = context.measureText(currentLine).width; - if (lineWidth + wordWidth > width) { - lineCount++; - currentLine = words[i]; - } else { - currentLine += words[i]; - } - } - if (currentLine.trim() !== "") lineCount++; - return lineCount; - } - function calcLines() { - const lines = textarea.value.split("\n"); - const textareaWidth = textarea.getBoundingClientRect().width; - const textareaScrollWidth = textareaWidth - textarea.clientWidth; - const parseNumber = (v) => - v.endsWith("px") ? parseInt(v.slice(0, -2), 10) : 0; - const textareaPaddingLeft = parseNumber(textareaStyles.paddingLeft); - const textareaPaddingRight = parseNumber(textareaStyles.paddingRight); - const textareaContentWidth = textareaWidth - textareaPaddingLeft - - textareaPaddingRight - textareaScrollWidth; - const numLines = lines.map((lineString) => - calcStringLines(lineString, textareaContentWidth) - ); - let lineNumbers = []; - let i = 1; - while (numLines.length > 0) { - const numLinesOfSentence = numLines.shift(); - lineNumbers.push(i); - if (numLinesOfSentence > 1) { - Array(numLinesOfSentence - 1) - .fill("") - .forEach((_) => lineNumbers.push("")); - } - i++; - } - return lineNumbers; - } - function initLineNumbers() { - const lines = calcLines(); - const lineDoms = Array.from({ - length: lines.length, - }, (_, i) => `
${lines[i] || " "}
`); - number.innerHTML = lineDoms.join(""); - } - function initCanvas() { - const lang = textarea.value.split("\n")[0]; - const code = textarea.value.split("\n").slice(1).join("\n"); - rdcanvas.innerHTML = RDViewRender(lang, code); - } - initCanvas(); - initLineNumbers(); - textarea.addEventListener("input", initLineNumbers); - textarea.addEventListener("input", initCanvas); -} - function rdview2() { let rdview = document.getElementsByClassName("rdview2")[0]; if (!rdview) return;