forked from RDCNWebs/rd.rdlevel.cn
大量合并更新
This commit is contained in:
parent
4e6cc59300
commit
8b4877724e
@ -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#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 |
|
||||
|
||||
@ -1,5 +1,18 @@
|
||||
# 更新信息
|
||||
|
||||
#### 2026-03-25
|
||||
- 更新事件列表
|
||||
- 更新预设特效列表
|
||||
- 修正格式错误
|
||||
- 更改“设置窗口数量”译名为“设置窗口内容”
|
||||
- 补充 WindowDance 页内容
|
||||
- 更新轨道涂色属性页图片
|
||||
- 更新轨道重排序事件
|
||||
- 更新旋转轨道事件的详细内容
|
||||
- 更新默认轨道的各部分位置分布数值
|
||||
- 为改变轨道事件描述添加图片
|
||||
- 更新制作人员表
|
||||
|
||||
#### 2026-03-01
|
||||
- **变量**一节被替换为[表达式](../pages/expression.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)
|
||||
|
||||
@ -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之后还需要调整偏移。我们看一下下面波形图案,点击`‐`和`+`两个按钮进行缩小和放大。
|
||||
|
||||
|
||||
@ -166,7 +166,7 @@
|
||||
|
||||
将`轨道`从主轨道上**分割**出来,并旋转到`角度`度。
|
||||
|
||||
## 重排序:行
|
||||
## 轨道重排序~~重排序:行~~
|
||||
|
||||
将轨道转移到其他房间,或者改变轨道的层级
|
||||
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
# 视觉干扰
|
||||
|
||||
> 在关卡中出现对比度较高画面快速交替,如红蓝、黑白快速闪烁,必须开启癫痫警告。使用“放克”特效,必须开启癫痫警告。使用“干扰”特效较多,建议开启癫痫警告。一秒出现3次以上快速闪烁,建议开启癫痫警告。
|
||||
> 在关卡中出现对比度较高画面快速交替,如红蓝、黑白快速闪烁,必须开启癫痫警告。
|
||||
> 使用“放克”特效,必须开启癫痫警告。
|
||||
> 使用“干扰”特效较多,建议开启癫痫警告。
|
||||
> 一秒出现3次以上快速闪烁,建议开启癫痫警告。
|
||||
|
||||
> 即使开启了癫痫警告,也不要设计出会伤害视力的干扰效果。
|
||||
|
||||
|
||||
@ -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) => `<div>${lines[i] || " "}</div>`);
|
||||
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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user