绘制刻度
在本章中,您将会学习到:
- 如何计算最大节拍
- 如何绘制节拍刻度
节拍
为了知道有多少刻度需要绘制,我们首先需要知道在一个关卡中多有少节拍。
与获取关卡长度类似,我们可以使用一个变量存储节拍,并让音符持续更新它。
#ifdef preview
class chart {
public:
Variable<PreviewDataId> beats;
// ...
}chart;
// ...
#endif
class Note: public Archetype {
// ...
SonolusApi preprocess() {
FUNCBEGIN
chart.beats = Max(chart.beats, beat);
// ...
return VOID;
}
// ...
};
刻度
现在我们可以循环节拍,并在每 4 拍打印一次:
class Stage: public Archetype {
// ...
SonolusApi printMeasures() {
FUNCBEGIN
FOR (i, 4, Floor(chart.beats) + 1, 4) {
print(i / 4 + 1, BeatToTime(i), PrintFormat.MeasureCount, 0, PrintColor.Neutral, false);
} DONE
return VOID;
}
SonolusApi render() {
FUNCBEGIN
// ...
printMeasures();
return VOID;
}
};