09. BPM
在本章中,我们将设置并实现 BPM 变化。
BPM 变化
在游玩模式中,我们不需要实现 BPM 变化原型,因为 BPM 变化会被相关函数自动处理,我们不需要对其坐任何事。
然而在预览模式中,我们想要通过将其打印到一边来显示 BPM 何时变化以及变化后的值。
BPM 变化原型
让我们先设置一个 BPM 变化原型:
export class BpmChange extends Archetype {}
export class BpmChange extends Archetype {}
export const archetypes = defineArchetypes({
// ...
[EngineArchetypeName.BpmChange]: BpmChange,
})
export const archetypes = defineArchetypes({
// ...
[EngineArchetypeName.BpmChange]: BpmChange,
})
数据
我们想要通过 Entity Data 区块来访问 BPM 变化的节拍和 BPM 值:
export class BpmChange extends Archetype {
import = this.defineImport({
beat: { name: EngineArchetypeDataName.Beat, type: Number },
bpm: { name: EngineArchetypeDataName.Bpm, type: Number },
})
}
export class BpmChange extends Archetype {
import = this.defineImport({
beat: { name: EngineArchetypeDataName.Beat, type: Number },
bpm: { name: EngineArchetypeDataName.Bpm, type: Number },
})
}
声明
export const skin = defineSkin({
sprites: {
// ...
bpmChangeLine: SkinSpriteName.GridPurple,
},
})
export const skin = defineSkin({
sprites: {
// ...
bpmChangeLine: SkinSpriteName.GridPurple,
},
})
打印与刻度线
现在我们可以打印 BPM 值并绘制刻度线:
export class BpmChange extends Archetype {
// ...
render() {
line(skin.sprites.bpmChangeLine, this.import.beat, 0.5)
print(
this.import.bpm,
bpmChanges.at(this.import.beat).time,
PrintFormat.BPM,
'auto',
PrintColor.Purple,
'right',
)
}
}
export class BpmChange extends Archetype {
// ...
render() {
line(skin.sprites.bpmChangeLine, this.import.beat, 0.5)
print(
this.import.bpm,
bpmChanges.at(this.import.beat).time,
PrintFormat.BPM,
'auto',
PrintColor.Purple,
'right',
)
}
}