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