Chrono(遊戲時間)
ll/api/chrono/ · 通用
概述
Chrono 模塊提供了基於 std::chrono 的遊戲專用時間類型,包括遊戲刻時長、遊戲時鐘和用於表達遊戲時間的用戶自定義字面量。
頭文件
| 頭文件 | 說明 |
|---|---|
ll/api/chrono/GameChrono.h | 遊戲刻時長、時鐘和字面量 |
遊戲刻時長
遊戲時間以 tick(刻) 為單位(20 刻 = 1 現實秒)。提供以下時長類型:
| 類型 | 定義 | 等價 |
|---|---|---|
game::ticks | duration<int64, ratio<1, 20>> | 1 刻 = 50ms |
game::days | 24000 刻 | 1 Minecraft 天 |
game::hours | 1000 刻 | 1 Minecraft 小時 |
game::minutes | ~16.67 刻 | 1 Minecraft 分鐘 |
game::weeks | 7 遊戲天 | 1 Minecraft 周 |
game::months | ~1/12 遊戲年 | 1 Minecraft 月 |
game::years | 365 遊戲天 | 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 秒相關模塊
- Thread(線程工具) —
TickSyncSleep使用遊戲時間類型 - Coroutine(協程) —
SleepAwaiter與時間類型配合使用