Sonolus Wiki

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 的主要目的是用于引擎脚本,而不是用于创建关卡。在本指南中,我们将准备一个测试关卡来测试引擎,但这不是本指南的重点。