07. 音符和实体数据
在本章中,我们将编写音符并学习如何将实体数据集成至其中。
音符原型
让我们先写好音符原型:
export class Note extends Archetype {}
export class Note extends Archetype {}
export const archetypes = defineArchetypes({
// ...
Note,
})
export const archetypes = defineArchetypes({
// ...
Note,
})
实体数据
到目前为止,我们只有初始化和舞台这两个原型,两者在所有关卡中的行为应该都相同。
然而,对于音符来说情况并非如此:在一个关卡中,第一个音符可能在 5 秒处,而在另一个关卡中,它可能在 2 秒处;一个关卡可能有 200 个音符,而另一个关卡可能有 30 个。
引擎如何来处理关卡,来提供的具有不同信息、不同数量的音符?这就是实体数据发挥作用的地方。每个关卡都可以详细地规定所有实体,并向它们注入数据。
让我们为音符定义一个叫做time
的数据,表示以秒为单位的音符时间。我们可以使用它的名称来导入数据:
export class Note extends Archetype {
import = this.defineImport({
time: { name: 'time', type: Number },
})
}
export class Note extends Archetype {
import = this.defineImport({
time: { name: 'time', type: Number },
})
}
现在我们可以很轻易地访问它。为了测试效果,让我们打印一些日志:
export class Note extends Archetype {
// ...
updateParallel() {
debug.log(this.import.time)
}
}
export class Note extends Archetype {
// ...
updateParallel() {
debug.log(this.import.time)
}
}
最后,让我们在关卡中添加一个音符实体,同时为其提供时间数据:
export const data: LevelData = {
// ...
entities: [
// ...
{
archetype: 'Note',
data: [
{
name: 'time',
value: 2,
},
],
},
],
}
export const data = {
// ...
entities: [
// ...
{
archetype: 'Note',
data: [
{
name: 'time',
value: 2,
},
],
},
],
}