Skip to content

服务器 API » 定时事件

对于 定时事件, 建议使用 Room 实例中的 this.clock 方法.

Tip

当 Room 被释放时, 注册在 this.clock 上的重复计时和超时计时都会被自动清除.

重要

内置 setTimeout 和 setInterval 方法依赖 CPU 负载, 可能造成更多的时间延迟.

Clock

在状态同步事件机制之外, Clock 提供了另一种思路. 举一个使用案例: 当一名玩家获得某植物之后, 可以用 clock.setTimeout 来刷新长出的植物. 使用 clock. 的好处就在于无须关心房间状态更新变化, 可以专注计时程序而脱离状态机制.

公开方法

备注: time 参数以毫秒为单位

clock.setInterval(callback, time, ...args):Delayed

setInterval() 方法会重复调用一个函数或执行一个代码段, 每次调用之间有固定的时间间隔. 它返回 Delayed 实例作为 id, 以便后续操控.

clock.setTimeout(callback, time, ...args):Delayed

setTimeout() 方法会设置一个定时器, 定时器到期时会执行一个函数或特定代码段. 它返回 Delayed 实例作为 id, 以便后续操控.

示例

此 MVP 示例展示的功能有: setInterval(), setTimeout 及清理之前储存的 Delayed 实例; 使用房间时钟显示当前时间. 每一秒钟 'Time now ' + this.clock.currentTime 被 console.log 打印处理, 之后再过 10 秒清理计时器: this.delayedInterval.clear();.

// 导入 Delayed
import { Room, Client, Delayed } from "colyseus";

export class MyRoom extends Room {
    // 这个例子中
    public delayedInterval!: Delayed;

    // 房间初始化时
    onCreate(options: any) {
        // 时钟开始计时
        this.clock.start();

        // 设置间隔计时并保存其引用
        // 以便后续清理工作
        this.delayedInterval = this.clock.setInterval(() => {
            console.log("Time now " + this.clock.currentTime);
        }, 1000);

        // 10 秒过后清理计时器;
        // 这会让计时器 *停止并销毁*
        this.clock.setTimeout(() => {
            this.delayedInterval.clear();
        }, 10_000);
    }
}

clock.clear()

使用 clock.setInterval() 和 clock.setTimeout() 清除所有已注册的间隔计时器和超时计时器.

clock.start()

开始计时.

clock.stop()

停止计时.

clock.tick()

模拟时间步. 在 tick 期间会遍历所有 Delayed 实例.

Tip

更多信息请参考 Room#setSimiulationInterval().

公开属性

clock.elapsedTime

在 clock.start() 方法被调用后经过的时间, 以毫秒计. 只读.

clock.currentTime

当前时间, 以毫秒计. 只读.

clock.deltaTime

当前clock.tick()调用与上次调用之间经过的时间, 以毫秒计. 只读.

Delayed

延迟实例由 clock.setInterval() 或 clock.setTimeout() 方法所创建.

公开方法

delayed.pause()

在指定 Delayed 实例上暂停计时. (elapsedTime 不再增加, 直到调用 .resume().)

delayed.resume()

在指定 Delayed 实例上恢复计时. (elapsedTime 将会继续正常增加)

delayed.clear()

清除超时计时或间隔计时

delayed.reset()

重置计时器

公开属性

delayed.elapsedTime: number

Delayed 实例记录的时间, 自开始计时起, 以毫秒计.

delayed.active: boolean

如果计时器在工作中, 则返回 true.

delayed.paused: boolean

如果计时器已用 .pause() 暂停工作, 则返回 true.

Back to top