Merge pull request '更新事件列表和预设特效列表' (#55) from zyx/rd.rdlevel.cn:main into check

Reviewed-on: RDCNWebs/rd.rdlevel.cn#55
Reviewed-by: obugs <mail@obugs.zip>
This commit is contained in:
obugs 2026-03-25 14:44:41 +08:00
commit 4e6cc59300
6 changed files with 141 additions and 11 deletions

View File

@ -163,6 +163,8 @@
## 设置窗口内容
~~这个事件以前翻译错误,译成了**设置窗口数量**,害人不浅。~~
这个事件的设置项目是这样的:
![](../images/Window_Content.png)

View File

@ -34,6 +34,7 @@
| 切换玩家轨道 | `Y` | [采音和节奏设计](../pages/beatpatterndesign.md) | 切换轨道的游玩者1P2P或是CPU |
| 结束关卡 | `L` | [导入与导出](../pages/importandexport.md#导出关卡) | 制作关卡必需的特效,放置三个来结束关卡 |
| 显示手 | `U` | [](../pages/hand.md#显示手) | 显示或者隐藏手 |
| 手涂色 | `Shift+U` | [](../pages/hand.md#手涂色) | 设置轨道的边框、涂色、透明度 |
| 手分配 | `Shift+Y` | [](../pages/hand.md#手分配) | 为手设置所属角色 |
| 设置播放方式 | `Shift+Z` | | 设置播放头的运动方式 |
| **环境类** | | | |
@ -48,7 +49,9 @@
| 移动轨道 | `O` | [轨道移动](../pages/moverow.md#轨道的移动) | 让轨道在画面中移动,缩放,旋转等 |
| 重排序:行 | `Shift+O` | | 将轨道移动到不同房间,或是重新对轨道进行排序 |
| 播放表情 | `J` | [自制角色与精灵资源](../pages/spritesheet.md#播放表情) | 改变轨道中角色的表情 |
| 改变角色 | `Shift+J` | [轨道视效](../pages/rowfx.md#轨道涂色) | 改变轨道的角色 |
| 轨道涂色 | `R` | [轨道视效](../pages/rowfx.md#轨道涂色) | 设置轨道的边框、涂色、透明度 |
| 旋转轨道 | `Shift+S` | | (仅高级模式下可用)将另一个轨道连接到角色上,实现`7-1`中的一人多轨 |
| **摄像头特效类** | | | |
| 移动摄像头 | `C` | [镜头移动](../pages/camera.md) | 设置摄像头动画 |
| 脉冲摄像机 | `Shift+C` | [轨道视效](../pages/rowfx.md#和轨道相关的特效) | 添加一个按一定时间和频次缩放画面的效果 |
@ -60,18 +63,18 @@
| 设置速度 | `S` | [轨道视效](../pages/vfx.md#设置速度) | 改变整个画面中物件及特效的运行速度 |
| 自定义闪烁 | `F` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 自定义屏幕闪烁的图层位置,颜色,透明度 |
| 闪烁 | `Shift+F` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 简单地屏幕闪烁 |
| 重低音震动 | `K` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 添加一次大幅度的色像差大幅度屏幕缩放 |
| 重低音震动 | `K` | [轨道视效](../pages/rowfx.md#适合配合轨道或节拍一起使用的特效) | 添加一次大幅度的色像差+大幅度屏幕缩放 |
| 颜色反转 | `I` | [镜厅](../pages/hallofmirror.md) | 给画面添加反色效果 |
| 卡带效果 | `E` | [视觉干扰](../pages/vfx.md#卡带效果) | 反复重现某个画面造成卡顿错觉 |
| 手涂色 | `Shift+U` | [](../pages/hand.md#手涂色) | 改变手的颜色 |
| 窗口动效 | `W` | [窗口移动](../pages/windowmove.md) | 把关卡变成窗口模式,并设置窗口的移动 |
| 窗口动效 | `W` | [窗口移动](../pages/WindowDance.md#窗口相关的动画) | 把关卡变成窗口模式,并设置窗口的移动 |
| **文本类** | | | |
| 显示对话 | `D` | [其他文字事件](../pages/captions.md#显示对话) | 添加一个悬浮在屏幕上方或下方的对话窗口 |
| 显示状态标识 | `Shift+D` | [其他文字事件](../pages/captions.md#显示状态牌) | 在画面左上角显示一个状态标识 |
| 浮动文字 | `A` | [浮动文字](../pages/floatingtext.md) | 在画面中显示一段文字 |
| 弹幕效果 | `Shift+A` | [其他文字事件](../pages/captions.md#弹幕效果) | 添加一个从右至左的弹幕飘过效果 |
| 弹幕效果 | `Shift+A` | [其他文字事件](../pages/captions.md#弹幕效果) | 添加弹幕飘过效果 |
| **组件类** | | | |
| 标签动作 | `O` | [标签](../pages/tag.md#设置标签事件) | 运行/禁用指定标签带有的事件 |
| 标签动作 | `O` | [标签](../pages/tag.md#设置标签事件) | 运行/禁用带有指定标签的事件 |
| 调用自定义方法 | `Z` | [自定义方法](../pages/custommethod.md) | 运行指令,执行无法用常规手段达成的效果 |
| 注释 | `M` | [标签](../pages/tag.md#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 |
@ -79,9 +82,9 @@
| 功能 | 快捷键 | 章节 | 内容 |
| :--- | :--- | :--- | :--- |
| 排列显示房间 | `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) | 设置房间的透明度 |
@ -100,3 +103,17 @@
| 平铺精灵图 | `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#让事件摆放更有条理) | 添加注释内容或插入注释型自定义方法 |

View File

@ -8,29 +8,36 @@
| <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> | 画面向上移动,并且从下方重复出现;需要注意:水平垂直滚屏只能存在一个 |
| | 画面带有横条和轻微抖动,有老式录像机的感觉 |
| <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,11 +57,15 @@
| 矩阵 | 添加一个绿色音符上升的效果,和`1-XN`这关是一样的,可以和前景背景叠加起来显示 |
| 落花 | 屏幕上方开始落下花瓣,可以和前景背景叠加起来显示 |
| 落花即刻 | 屏幕上方落下花瓣,同时屏幕上已生成一些花瓣,可以和前景背景叠加起来显示 |
| 落叶 | 屏幕上方开始落下落叶,可以和前景背景叠加起来显示 |
| 飘雪 | 屏幕上方开始落下雪花,可以和前景背景叠加起来显示 |
| 雪花 | 屏幕上方开始落下快速的雪花,短时间内充满屏幕,可以和前景背景叠加起来显示 |
| 暴风雪 | 屏幕上方开始落下暴风雪,可以和前景背景叠加起来显示 |
| 钻石 | 屏幕上出现很多方块 |
| 气球 | 屏幕下方飘出很多气球 |
| 余烬 | 屏幕上出现飘动的火星 |
| 纸屑 | 屏幕上方落下各种颜色的纸屑 |
| 彩纸爆破 | 屏幕左下角和右下角爆出彩纸,和`5-3N`中一样 |
| 教程音符 | 屏幕铺满剧情模式教程中的音符背景,可以自定义颜色等 |
| | |
| **轨道类** | |
@ -65,7 +76,7 @@
| <font color='red'>轨道全白</font> | 把轨道变成纯白色,需要事先布置一个轨道涂色物件 |
| <font color='red'>轨道轮廓光</font> | 把轨道变成纯黑色白边,需要事先布置一个轨道涂色物件 |
| <font color='red'>轨道普通</font> | 把轨道变成普通样子,需要事先布置一个轨道涂色物件 |
| 波状轨道 | 轨道自己上下来回移动,类似于`2-3N`这关 |
| 轨道浮动 | 轨道自己上下来回移动,类似于`2-2`这关 |
| 脉冲计数 | 对普通拍子轨道有效轨道上方随节奏出现1~7的数字每个房间只能有一条轨道显示 |
| 心跳震屏 | 每个心跳拍子都会让轨道抖动一下 |
| 按键震屏 | 每个按键拍子都会让轨道抖动一下 |

View File

@ -41,7 +41,7 @@
例如 `str:Samurai`, `str:Linear`
- #### 预定义变量
节奏医生为整数、浮点数、布尔类型各预定义了 10 个可读写变量,分别以 `i`, `f`, `b` 开头,即 `i0`~`i9`, `f0`~`f9`, `b0`~`b9`
节奏医生为整数、浮点数、布尔类型各预定义了 10 个可读写变量,分别以 `i`, `f`, `b` 开头,即 `i0`-`i9`, `f0`-`f9`, `b0`-`b9`
一些只读或只写的变量可在[自定义方法表](../pages/appendix_custommethods.md)查到。
## 运算类型

View File

@ -236,6 +236,91 @@ 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] || "&nbsp;"}</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;

View File

@ -1313,3 +1313,18 @@ del {
transition: background-color 0.3s, transform 0.2s;
z-index: 20;
}
.controlSpan {
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-family: "d9", sans-serif;
font-size: 16px;
height: 30px;
width: 30px;
transition: background-color 0.3s, transform 0.2s;
z-index: 20;
}