From ad83a4f70d6ddbc6e2a4983af221d89ce911cfa5 Mon Sep 17 00:00:00 2001 From: zhenyan121 <3367366583@qq.com> Date: Thu, 25 Dec 2025 15:45:07 +0800 Subject: [PATCH] Added Time class --- src/core/Time.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/core/Time.h | 20 ++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 src/core/Time.cpp create mode 100644 src/core/Time.h diff --git a/src/core/Time.cpp b/src/core/Time.cpp new file mode 100644 index 0000000..db7fe69 --- /dev/null +++ b/src/core/Time.cpp @@ -0,0 +1,46 @@ +#include "Time.h" + +Uint64 Time::s_lastCounter = 0; +Uint64 Time::s_freq = 0; +double Time::s_deltaTime = 0.0; + +int Time::s_frames = 0; +double Time::s_fps = 0.0; +double Time::s_fpsTimer = 0.0; + +void Time::init() +{ + s_freq = SDL_GetPerformanceFrequency(); + s_lastCounter = SDL_GetPerformanceCounter(); +} + +void Time::update() +{ + Uint64 now = SDL_GetPerformanceCounter(); + s_deltaTime = (double)(now - s_lastCounter) / s_freq; + s_lastCounter = now; + + // 防止切后台 + if (s_deltaTime > 0.05) + s_deltaTime = 0.05; + + // FPS + s_frames++; + s_fpsTimer += s_deltaTime; + + if (s_fpsTimer >= 1.0) { + s_fps = s_frames / s_fpsTimer; + s_frames = 0; + s_fpsTimer = 0.0; + } +} + +double Time::deltaTime() +{ + return s_deltaTime; +} + +double Time::fps() +{ + return s_fps; +} diff --git a/src/core/Time.h b/src/core/Time.h new file mode 100644 index 0000000..919950b --- /dev/null +++ b/src/core/Time.h @@ -0,0 +1,20 @@ +#pragma once +#include + +class Time { +public: + static void init(); + static void update(); + + static double deltaTime(); + static double fps(); + +private: + static Uint64 s_lastCounter; + static Uint64 s_freq; + static double s_deltaTime; + + static int s_frames; + static double s_fps; + static double s_fpsTimer; +};