打印时间
在本章中,您将会学习到:
- 打印函数
- 时间打印
打印
即使预览模式已经工作并且我们可以看见所有音符,但对于玩家来说很容易在滚动屏幕时迷失。
这就是为什么我们在面板的每一边留下了一些空间,因此我们可以打印有用的信息,比如说时间和刻度。在接下来的章节中,我们还将使用这些空间打印 BPM 和倍速。
让我们使用一个实用函数来更简单地打印信息:
SonolusApi print(
let value,
let time,
let format,
let decimalPlaces,
let color,
bool isLeft
) {
FUNCBEGIN
auto pos = panel.getPos(time);
if (isLeft) pos.first -= 3 * screen.h / 20;
else pos.first += 3 * screen.h / 20;
Print(
value,
format,
decimalPlaces,
pos.first, pos.second,
isLeft, 0.5,
screen.h / 10, screen.h / 20,,
0,
color,
1,
isLeft ? playData::HorizontalAlign.Left : playData::HorizontalAlign.Right,
false
);
return VOID;
}
:::
这个实用函数在特定时间简单地绘制了一个值,并提供一些选项。另外它还确保了当它过于接近屏幕的顶部和底部时,打印出的文字总是可见的。
时间
现在我们可以遍历持续时间,并在每一秒打印一次:
class Stage: public Archetype {
// ...
SonolusApi printTimes() {
FUNCBEGIN
FOR (i, 1, Floor(chart.duration) + 1, 1) {
print(i, i, PrintFormat.Time, 0, PrintColor.Neutral, true);
} DONE
return VOID;
}
SonolusApi render() {
FUNCBEGIN
// ...
printTimes();
return VOID;
}
};
注意到我们从 1 开始而不是 0,这是因为在关卡开始会有 BPM 变化和倍速变化,我们不想遮挡它们。
尽管它可能因引擎而异,但我们经常在左边打印与时间相关的信息,在右边打印与节拍相关的信息。时间经常以中性色绘制,这样不会引起过多注意。