节拍刻度线
在本章中,您将会学习到:
- 刻度线实用函数
- 如何绘制节拍刻度线
刻度线
刻度线可以让玩家更精确地测量音符的位置。
就像打印一样,让我们使用一个实用函数来绘制刻度线:
SonolusApi line(let sprite, let beat, let a) {
FUNCBEGIN
auto pos = panel.getPos(BeatToTime(beat));
let l = pos.first - 3 * screen.h / 20, r = pos.first + 3 * screen.h / 20;
let b = pos.second - 0.01 * screen.h / 20, t = pos.second + 0.01 * screen.h / 20;
Draw(sprite, l, b, l, t, r, t, r, b, 1, a);
return VOID;
}
声明
标准方格精灵可以被用来绘制刻度线:
class Sprites {
public:
// ...
int beatLine = 5;
}Sprites;
auto skins = defineSkins<class Sprites>({
// ...
{ SkinSpriteName.GridNeutral, Sprites.beatLine }
});
节拍刻度线
现在我们可以循环节拍,并在每一拍绘制一条刻度线来强调当前刻度:
class Stage: public Archetype {
// ...
SonolusApi renderBeats() {
FUNCBEGIN
FOR (i, 0, Floor(chart.beats) + 1, 1) {
line(Sprites.beatLine, i, If(i % 4 == 0, 0.25, 0.125));
} DONE
return VOID;
}
SonolusApi render() {
FUNCBEGIN
// ...
renderBeats();
return VOID;
}
};