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++ |
|---|
1
2
3
4
5
6
7
8
9
10
11
12 | #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 秒
|
相关模块