02. 原型和实体
在本章中,我们将学习原型和实体的概念。
原型
原型是实体的抽象,由引擎定义。
在本指南中,我们的引擎将有四种原型:初始化、输入管理器、舞台和音符原型。初始化原型负责初始化关卡;输入管理器原型负责管理玩家输入;舞台原型负责管理舞台的交互和渲染;最后,音符原型负责管理交互和音符渲染。
请注意,原型表示某一类实体的抽象。例如,一个关卡中可能有 100 个音符,它们可能在生成,以及要求玩家在不同时间击中等方式上有所不同,但它们都是同一个音符原型的实例。
在面向对象编程中,原型是一个类。
使用 Sonolus.js,原型由 JS 类表示,例如项目模板附带的Stage
类:
export class Stage extends Archetype {
spawnOrder() {
return 1
}
shouldSpawn() {
return entityInfos.get(0).state === EntityState.Despawned
}
updateParallel() {
debug.log(time.now)
}
}
export class Stage extends Archetype {
spawnOrder() {
return 1
}
shouldSpawn() {
return entityInfos.get(0).state === EntityState.Despawned
}
updateParallel() {
debug.log(time.now)
}
}
实体
实体是原型的实例,由关卡定义。
多个关卡可能使用同一个引擎,通过定义不同的实体实现不同的玩法。例如,一个关卡可能有 1 个初始化原型实体、1 个 Stage 原型实体和 50 个 Note 原型实体;另一个关卡可能几乎相同,除了它有 100 个音符实体。
在面向对象的编程中,实体是类的实例。
Sonolus.js 的主要目的是用于引擎脚本,而不是用于创建关卡。在本指南中,我们将准备一个测试关卡来测试引擎,但这不是本指南的重点。