跳到正文
本頁目錄

Chrono(遊戲時間)

ll/api/chrono/ · 通用

概述

Chrono 模塊提供了基於 std::chrono 的遊戲專用時間類型,包括遊戲刻時長、遊戲時鐘和用於表達遊戲時間的用戶自定義字面量。

頭文件

頭文件說明
ll/api/chrono/GameChrono.h遊戲刻時長、時鐘和字面量

遊戲刻時長

遊戲時間以 tick(刻) 為單位(20 刻 = 1 現實秒)。提供以下時長類型:

類型定義等價
game::ticksduration<int64, ratio<1, 20>>1 刻 = 50ms
game::days24000 刻1 Minecraft 天
game::hours1000 刻1 Minecraft 小時
game::minutes~16.67 刻1 Minecraft 分鐘
game::weeks7 遊戲天1 Minecraft 周
game::months~1/12 遊戲年1 Minecraft 月
game::years365 遊戲天1 Minecraft 年

用戶自定義字面量

C++
#include "ll/api/chrono/GameChrono.h"

using namespace ll::chrono_literals;

auto tenTicks   = 10_tick;
auto halfDay    = 12000_tick;

時鐘

GameTickClock

跟蹤遊戲刻的時鐘。時間僅在遊戲運行時推進。

C++
#include "ll/api/chrono/GameChrono.h"

auto now = ll::chrono::GameTickClock::now();
auto tp  = ll::chrono::GameTickClock::fromTick(100);

ServerClock

跟蹤服務器真實牆鍾時間的時鐘。

C++
auto serverNow = ll::chrono::ServerClock::now();

使用方法

測量遊戲時間間隔

C++
#include "ll/api/chrono/GameChrono.h"

void onTick() {
    using namespace ll::chrono;
    static auto lastCheck = GameTickClock::now();

    auto elapsed = GameTickClock::now() - lastCheck;
    if (elapsed >= game::days{1}) {
        // 一个游戏日已过
        lastCheck = GameTickClock::now();
    }
}

時長之間的轉換

C++
#include "ll/api/chrono/GameChrono.h"
#include <chrono>

using namespace ll::chrono;

// 将游戏刻转换为现实时间秒数
auto ticks = game::ticks{100};
auto realSeconds = std::chrono::duration_cast<std::chrono::seconds>(ticks); // 5 秒

相關模塊